Visualizzazione dei risultati da 1 a 5 su 5

Discussione: domanda interfaccia

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    415

    domanda interfaccia

    Ciao a tutti,
    sto imparando java seguendo il tutorial di Sun e facendo un esercizio sulle interfacce mi sono imbattuto in questo errore:

    Exception in thread "main" java.lang.NoSuchMethodError: main

    Il codice sorgente è:

    Codice PHP:
    public class cSequenceExample {

        public static 
    void main(String[] args) {
            
    cSequence miaFrase = new cSequence("ciao, questa è una prova");
            
    System.out.println("Il terzo carattere della frase è " miaFrase.charAt(3) + ".");
            
    System.out.println("La lunghezza della frase è " miaFrase.length() + ".");
            
    System.out.println("Un pezzo della frase è " miaFrase.subSequence(719) + ".");
            
    System.out.println("La frase è: " miaFrase.toString() + ".");
        }

        public class 
    cSequence implements CharSequence {
            
            public 
    String frase;
            
            public 
    cSequence(String f) {
                
    frase f;
            }
            
            public 
    char charAt(int pos) {
                return 
    frase.charAt(pos);
            }
            
            public 
    int length() {
                return 
    frase.length();
            }
            
            public 
    CharSequence subSequence(int sPosint ePos) {
                return 
    frase.subSequence(sPosePos);
            }
            
            public 
    String toString() {
                return 
    frase.toString();
            }
            
        }


    Guardando l'esempio svolto del tutorial ho capito come va fatto e infatti sono riuscito a compilarlo, ma non riesco a capire perché in questo modo non funziona. Sapete chiarirmi le idee?
    Grazie!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Il tuo codice non compila nemmeno. La tua classe cSequence è una inner class, una classe dichiarata non statica dentro un'altra classe. Una delle peculiarità di una inner class è che una istanza della inner class deve essere "legata" ad una istanza della classe che la contiene e tra queste due classi esiste una relazione molto "particolare".

    Per poter istanziare una inner class, devi prima avere una istanza della classe che fa da contenitore (nel tuo caso cSequenceExample).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    415
    Ho trovato due soluzioni funzionanti:

    1)
    Codice PHP:
    class cSequence implements CharSequence {
            
            public 
    String frase;
            
            public static 
    void main(String[] args) {
                
    cSequence miaFrase = new cSequence("ciao, questa è una prova");
                
    System.out.println("Il terzo carattere della frase è " miaFrase.charAt(3) + ".");
                
    System.out.println("La lunghezza della frase è " miaFrase.length() + ".");
                
    System.out.println("Un pezzo della frase è " miaFrase.subSequence(719) + ".");
                
    System.out.println("La frase è: " miaFrase.toString() + ".");
            }
            
            public 
    cSequence(String f) {
                
    frase f;
            }
            
            public 
    char charAt(int pos) {
                return 
    frase.charAt(pos);
            }
            
            public 
    int length() {
                return 
    frase.length();
            }
            
            public 
    CharSequence subSequence(int sPosint ePos) {
                return 
    frase.subSequence(sPosePos);
            }
            
            public 
    String toString() {
                return 
    frase.toString();
            }
            
        } 
    2)
    Codice PHP:
    public class cSequenceExample {

        public static 
    void main(String[] args) {
            
    cSequence miaFrase = new cSequence("ciao, questa è una prova");
            
    System.out.println("Il terzo carattere della frase è " miaFrase.charAt(3) + ".");
            
    System.out.println("La lunghezza della frase è " miaFrase.length() + ".");
            
    System.out.println("Un pezzo della frase è " miaFrase.subSequence(719) + ".");
            
    System.out.println("La frase è: " miaFrase.toString() + ".");
        }

    }

    class 
    cSequence implements CharSequence {
            
            public 
    String frase;
            
            public 
    cSequence(String f) {
                
    frase f;
            }
            
            public 
    char charAt(int pos) {
                return 
    frase.charAt(pos);
            }
            
            public 
    int length() {
                return 
    frase.length();
            }
            
            public 
    CharSequence subSequence(int sPosint ePos) {
                return 
    frase.subSequence(sPosePos);
            }
            
            public 
    String toString() {
                return 
    frase.toString();
            }
            
        } 
    Se tu dovessi scrivere questo programma quale useresti? Quello che mi interessa sapere è qual'è la logica "standard" della programmazione ad oggetti in questi casi.

    Per quanto riguarda la seconda soluzione, inizialmente avevo usato:

    public class cSequence implements CharSequence {

    ma poi ho tolto il public perché non compilava, sai spiegarmi il perché?

    Grazie ancora.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Teo80
    Ho trovato due soluzioni funzionanti:
    L'unica differenza tra le due è dove è stato messo il metodo main().

    Originariamente inviato da Teo80
    Se tu dovessi scrivere questo programma quale useresti? Quello che mi interessa sapere è qual'è la logica "standard" della programmazione ad oggetti in questi casi.
    Come brevi e semplici esempi, tecnicamente vanno bene entrambi. Come "design" è preferibile la seconda, perché cSequence contiene solo ed esclusivamente ciò che riguarda la gestione di una sequenza di char. Mentre il main() è in un'altra classe apposita per il test.

    Originariamente inviato da Teo80
    Per quanto riguarda la seconda soluzione, inizialmente avevo usato:

    public class cSequence implements CharSequence {

    ma poi ho tolto il public perché non compilava, sai spiegarmi il perché?
    All'interno di un singolo file .java possono essere definite più classi ma solo una al massimo può essere marcata public. E se c'è una classe public, allora il nome del file (a parte l'estensione) deve corrispondere esattamente con il nome della classe public.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    415
    Grazie mille, sei molto chiaro.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.