Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    Problema di compilazione

    Salve a tutti.
    Chiedo gentilmente un aiuto non riesco a compilare un esercizio di java riguardo:

    public class Impiegato{

    private String nome;
    private String cognome;
    private int straordinario;
    private Ufficio ufficio;(qui mi da un errore :annot find symbol
    symbol : class Ufficio
    location: class impiegati.Impiegato
    private Ufficio ufficio

    L'altra classe si chiama Ufficio la compila tranquillamente quando poi dichiaro come proprietà nella classe impiegato Ufficio mi scatta un errore.

    Anche altri esempi simili fa la stessa cosa qualcuno mi può consigliare come posso risolvere il problema.
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Problema di compilazione

    Originariamente inviato da rosyana
    public class Impiegato{

    private String nome;
    private String cognome;
    private int straordinario;
    private Ufficio ufficio;(qui mi da un errore :annot find symbol
    symbol : class Ufficio
    location: class impiegati.Impiegato
    private Ufficio ufficio

    L'altra classe si chiama Ufficio la compila tranquillamente quando poi dichiaro come proprietà nella classe impiegato Ufficio mi scatta un errore.
    Innanzitutto vedo che fai uso dei package (impiegati.Impiegato). Quindi dovresti spiegare se Ufficio è nello stesso package, in un altro package, come è dichiarato ecc....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ciao si Ufficio fa parte dello stesso package impiegati
    questa classe la compila tranquillamente.
    package impiegati;

    public class Ufficio{

    private String nome;
    private String sede;

    public Ufficio(String nome,String sede){
    this.nome=nome;
    this.sede=sede;
    }

    public String getNome(){
    return this.nome;
    }

    public String getSede(){
    return this.sede;
    }

    public double getRetribuzioneOraria(){
    double retribuzione=10;
    if (this.nome.equalsIgnoreCase("produzione")){
    retribuzione=12;
    }
    return retribuzione;
    }

    public double getMaggiorazone(){
    double maggiorazione=1;
    if(this.sede.equalsIgnoreCase("distaccata")){
    maggiorazione=1.3;
    }
    return maggiorazione;
    }
    }

    QUESTA CLASSE NON LA COMPILA

    package impiegati;
    public class Impiegato{

    private String nome;
    private String cognome;
    private int straordinario;
    private Ufficio ufficio;

    public Impiegato(){}

    public Impiegato(String nome,String cognome,int straordinario){
    this.nome=nome;
    this.cognome=cognome;
    this.straordinario=straordinario;
    }

    public void setUfficio(Ufficio ufficio){
    this.ufficio=ufficio;
    }

    public String getNome(){
    return this.nome;
    }

    public String getCognome(){
    return this.cognome;
    }

    public int getStraordinario(){
    return this.straordinario;
    }

    public Ufficio getUfficio(){
    return this.ufficio;
    }

    public double calcolaStraordinario(){
    int oreRetribuite=Math.min(this.straordinario,30);
    return (oreRetribuite * this.ufficio.getRetribuzoneOraria() * this.ufficio.getMaggiorazione());
    }
    }

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da rosyana
    Ciao si Ufficio fa parte dello stesso package impiegati
    questa classe la compila tranquillamente.
    A me le due classi compilano correttamente (salvo il fatto che ho dovuto correggere un errore di 'spelling' di getRetribuzioneOraria/getMaggiorazione).

    Credo che il tuo problema sia relativo alla struttura/posizione dei file java/class. Nota che i nomi dei package si devono "riflettere" nella struttura fisica delle directory.
    Quindi data una directory "base", ci deve essere una sottodirectory "impiegati" che deve contenere i due file .class (i sorgenti possono anche stare insieme ai class ma possono anche stare su un'altro ramo di directory separato).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Non funziona questi sono gli errori :

    C:\Documents and Settings\Rosanna\Desktop\impiegati\Impiegato.java: 8: cannot find symbol
    symbol : class Ufficio
    location: class impiegati.Impiegato
    private Ufficio ufficio;
    ^
    C:\Documents and Settings\Rosanna\Desktop\impiegati\Impiegato.java: 18: cannot find symbol
    symbol : class Ufficio
    location: class impiegati.Impiegato
    public void setUfficio(Ufficio ufficio){
    ^
    C:\Documents and Settings\Rosanna\Desktop\impiegati\Impiegato.java: 34: cannot find symbol
    symbol : class Ufficio
    location: class impiegati.Impiegato
    public Ufficio getUfficio(){
    ^
    3 errors

    Procedura completata con codice di uscita 1

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Non ti è chiaro come funzionano i package e come vanno usati/strutturati a livello di file-system.

    In una qualunque directory (con nome che preferisci) che io qui di seguito chiamerò "base", crea una sottodirectory chiamata tassativamente "impiegati". In questa directory mettici i 2 file Impiegato.java e Ufficio.java.

    Rimanendo sulla directory base, per compilare dai il comando:

    javac impiegati\Impiegato.java

    e vedrai che compila tutto correttamente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Scusami se insisto ma non funziona ho tanti esercizi simili ma non compila quelli che hanno come proprietà privata il nome della classe che richiamo come in impiegato c'è una proprietà privata Ufficio ufficio qui mi da errore.

    Ho una cartella che chiamo con il nome del package e compilo seguendo il percorso in cui si trova la cartella (solitamente in desktop) esattamente come mi hai scritto tu
    ma non gli va bene come tipo di variabile Ufficio e variabile ufficio qui mi da l'errore.

    In un altro esempio la stessa cosa
    package viaggi;

    public class Cliente{

    private String nome;
    private String cognome;
    private int eta;
    private String numerocarta;

    public Cliente(){}

    public Cliente(String nome, String cognome, int eta, String numerocarta){
    this.nome=nome;
    this.cognome=cognome;
    this.eta=eta;
    this.numerocarta=numerocarta;

    }

    public String getNome(){
    return this.nome;
    }

    public String getCognome(){
    return this.cognome;
    }

    public int getEta(){
    return this.eta;
    }

    public String getNumerocarta(){
    return this.numerocarta;
    }

    }(questa classe la compila perfettamente)



    package viaggi;

    public class Viaggio{

    private String destinazione;
    private int giorni;
    private int numPersone;
    private Cliente cliente;(qui da un errore)

    public Viaggio(){}

    public Viaggio(String destinazione, int giorni, int numPersone){
    this.destinazione=destinazione;
    this.giorni=giorni;
    this.numPersone=numPersone;
    }

    public void setCliente(){
    this.cliente=cliente;
    }

    public Cliente getCliente(){
    return this.cliente;
    }

    public String getDestinazione(){
    return this.destinazione;
    }

    public int getGiorni(){
    return this.giorni;
    }

    public int getNumPersone(){
    return this.numPersone;
    }

    public double calcolaImporto(Cliente cliente,String destinazione,int giorni,int numPersone)
    {
    double importo=0;
    if (destinazione.equalsIgnoreCase("Ischia"))
    importo=50*giorni*numPersone;

    if (destinazione.equalsIgnoreCase("Firenze"))
    importo=45*giorni*numPersone;
    else
    importo=40*giorni*numPersone;


    if (cliente.getEta()<20)
    importo=importo-(importo*10/100);


    return importo;

    }
    }

    Questa classe non la compila.
    Le due classi si trovano nella stesso package e nella stessa cartella

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Scusami se insisto io ma ripeto che si tratta solo di capire come vanno gestiti i package, tenendo anche in considerazione la questione del 'classpath'.

    Quale è il tuo classpath??? Su Windows echo %CLASSPATH% per saperlo....
    Nel classpath ci deve essere o il punto '.' (che sta per directory corrente) o il path assoluto/relativo alla directory che fa da base.

    Ripeto ancora una volta con schemino:
    codice:
    <base>
      |
      +-- impiegati
            |
            +-- Impiegato.java
                Ufficio.java
    Avendo come directory corrente la base compila con:

    javac -classpath . impiegati\Impiegato.java

    Stavolta ho specificato il '.' come classpath, perché non so a priori cosa hai nella variabile di ambiente CLASSPATH.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Sei gentilissimo.
    Allora nelle VARIABILI D'AMBIENTE HO:
    VARIABILI UTENTE: JAVA_HOME con il valore C:\Programmi\java\jdk1.5.0_06\bin;

    VARIABILI DI SISTEMA: PATH ho aggiunto lo stesso percorso C:\Programmi\java\jdk1.5.0_06\bin;

    E' un casino con questi programmi....

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da rosyana
    Sei gentilissimo.
    Allora nelle VARIABILI D'AMBIENTE HO:
    VARIABILI UTENTE: JAVA_HOME con il valore C:\Programmi\java\jdk1.5.0_06\bin;

    VARIABILI DI SISTEMA: PATH ho aggiunto lo stesso percorso C:\Programmi\java\jdk1.5.0_06\bin;

    E' un casino con questi programmi....
    Innanzitutto JAVA_HOME deve essere la 'home' del JDK, non la 'bin', quindi solo C:\Programmi\java\jdk1.5.0_06.

    Poi in PATH è appunto corretto mettere la 'bin' del JDK.

    Io comunque ho chiesto cosa hai (se hai qualcosa) nella variabile di ambiente CLASSPATH.

    In ogni caso, se provi come ho detto specificando -classpath ., ciò che hai (eventualmente) in CLASSPATH viene ignorato e pertanto non può non funzionare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.