Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di unit1
    Registrato dal
    Feb 2004
    Messaggi
    354

    [java] Semplice problema sugli oggetti

    Salve,

    è da poco tempo che studio il java e non so se mi potreste aiutare:

    Ho creato questo semplice programma ma non capisco perchè non funziona:

    codice:
    class Automobile{
        String tipo;
        int cilindrata;
        void mostra(){
        System.out.println(topo+"  cc: "+cilindrata);
       }
    }
    
    class n21{
       Automobile a;
       a = new Automobile();
       a.tipo="Ford";
       a.cilindrata=200;
       a.mostra();
    }
    in particolarare mi dice che a = new Automobile(); e le altre assegnazioni non sono valide.
    Mi sapreste spiegare perchè?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Beh... dovresti postare l'esatto messaggio di errore del compilatore perchè come l'hai posto tu non si capisce proprio.

    Prima domanda: quanti file hai?
    Seconda domanda: come si chiamano questi file?
    Terza domanda: beh... posta gli errori precisi.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di unit1
    Registrato dal
    Feb 2004
    Messaggi
    354
    ok, ti rispondo alle tue domande così specifico meglio:

    1) Ho un solo file
    2) si chiama "n21.java"
    3)
    codice:
    mario@mario-laptop:~/Documenti/scuola/prog 2/n1eser$ javac n21.java 
    n21.java:15: <identifier> expected
       a = new Automobile();
        ^
    n21.java:16: <identifier> expected
       a.tipo="Ford";
             ^
    n21.java:17: <identifier> expected
       a.cilindrata=200;
                   ^
    n21.java:18: <identifier> expected
       a.mostra();
               ^
    4 errors
    Non capisco proprio cosa non va..

  4. #4
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885
    ciao ,
    come già detto non si capisce molto la tua richiesta, cmq cosa è topo ?
    codice:
    System.out.println(topo+"  cc: "+cilindrata);
    ciao!

  5. #5
    Utente di HTML.it L'avatar di unit1
    Registrato dal
    Feb 2004
    Messaggi
    354
    Corretto, grazie non lo avevo visto.. Ma ancora non funziona e mi da gli stessi errori.

    Che altro devo spiegare? uso Linux ubuntu ma in caso ho anche WinXp..

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Andiamo con ordine:

    1) Consiglio: le regole di nomenclatura standard di Java prevedono che i nomi delle classi inizino con la maiuscola. Niente di grave se non la rispetti, ma ti potresti trovare male in futuro.

    2) Passiamo agli errori:

    codice:
    class n21{
       Automobile a;
       a = new Automobile();
       a.tipo="Ford";
       a.cilindrata=200;
       a.mostra();
    }
    Questa è tutto tranne che una classe corretta.
    La prima riga va bene: dichiari un oggetto "a" di tipo "Automobile" che è di istanza (fai attenzione qui, perchè più avanti la modifichiamo, rendendola di classe).
    Tutto il resto non ha alcun senso: le operazioni vanno sempre fatte dentro ai metodi. Quindi, almeno un metodo per classe (se non è una classe di costanti) ci va... tu non ne hai nessuno.

    Dato che intendi rendere la classe n21 quella principale (avviabile) è necessario avere il metodo main(). Dato che il metodo main() è statico, se vuoi usare delle variabili della classe n21 al suo interno, queste devono essere statiche (di classe):

    codice:
    class n21{
       static Automobile a;
       public static void main(String[] args) {
          a = new Automobile();
          a.tipo="Ford";
          a.cilindrata=200;
          a.mostra();
       }
    }
    Nella classe Automobile, forse volevi scrivere "tipo" e non "topo"...

    codice:
    System.out.println(tipo+"  cc: "+cilindrata);
    E questo è tutto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it L'avatar di unit1
    Registrato dal
    Feb 2004
    Messaggi
    354
    Hai ragione! adesso funziona, grazie 1000!!

    Mi spieghi meglio il fatto degli elementi static? e se io volessi fare qualcosa del tipo:

    codice:
    class Automobile{
        String tipo;
        int cilindrata;
       void Automobile(int cilindrata,String tipo){
         this.cilindrata=cilindrata;
         this.tipo=tipo;
       }
       void mostra(){
         System.out.println(tipo+"  cc: "+cilindrata);
       }
    }
    si può fare? come la chiamo :" a = new Automobile(300,"panda");"

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da unit1
    Hai ragione! adesso funziona, grazie 1000!!

    Mi spieghi meglio il fatto degli elementi static?
    Alcuni elementi (metodi e/o proprietà) possono essere definite di istanza oppure di classe.

    I metodi e le proprietà di istanza sono legati alla singola istanza della classe: ciascuna istanza ha le proprie proprietà e i propri metodi. Per poter richiamare un metodo o agire su di una proprietà di istanza è sempre necessario riferirsi alla particolare istanza. L'invocazione di un metodo di istanza avrà effetto sulla particolare istanza.

    I metodi e le proprietà di classe, al contrario, non sono legate a ciascuna istanza esistente, ma sono comuni a tutte le istanze essendo legate alla classe. Per poter richiamare questi metodi/proprietà non è necessario riferirsi ad una particolaer istanza, ma è sufficiente richiamarli sul nome della classe. Essi avranno "effetto" su tutte le istanze della classe. Questi sono dichiarati, appunto, "static".

    e se io volessi fare qualcosa del tipo:

    codice:
    class Automobile{
        String tipo;
        int cilindrata;
       void Automobile(int cilindrata,String tipo){
         this.cilindrata=cilindrata;
         this.tipo=tipo;
       }
       void mostra(){
         System.out.println(tipo+"  cc: "+cilindrata);
       }
    }
    si può fare? come la chiamo :" a = new Automobile(300,"panda");"
    Esatto.

    In questo esempio, ciascuna istanza della classe Automobile, avrà le sue proprietà ("private", diciamo... ma non ti confondere con i modificatori di tipo) chiamate "tipo" e "cilindrata" e saranno differenti per ciascun oggetto Automobile che verrà istanziato.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it L'avatar di unit1
    Registrato dal
    Feb 2004
    Messaggi
    354
    ok, l'esercizio successivo era simile ma chiedeva di usare i televisori e quindi ho provato nel secondo metodo:

    File: "N22.java"
    codice:
    class Televisore{
       private String marca;
       private int pollici;
       public void Televisore(String marca,int pollici){
          this.marca=marca;
          this.pollici=pollici;
       }
       void mostra(){
          System.out.println(marca+" "+pollici+"\"");
       }
    }
    class N22{
      static Televisore a;
      public static void main(String args[]){
         a=new Televisore("Tomson",15);
         a.mostra();
      }
    }
    errore:

    codice:
    mario@mario-laptop:~/Documenti/scuola/prog 2/n1eser$ javac N22.java 
    N22.java:15: cannot find symbol
    symbol  : constructor Televisore(java.lang.String,int)
    location: class Televisore
         a=new Televisore("Tomson",15);
           ^
    1 error
    Cosa ho sbagliato questa volta?

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.