Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    37

    Parametri tra classi...

    Ciao a tutti, vorrei qualche consiglio sulla risoluzione di alcuni es. collegati tra loro... sono a buon punto ma mi manca sempre qualche minima precisazione perché il codice funzioni come vorrei io...

    Gli es sono i seguenti:

    Es 1 : Considerate la classe Archivio qui sotto:

    codice:
    class Archivio {
      private int contenuto;
      private int capacita;  
      public Archivio(int capacita) {
        this.capacita = capacita;
    	contenuto = 0;
      }
      public int getContenuto() {
        return contenuto;
      }
      public void riempi(int quantita) {
        if (quantita > 0)
    	  if (contenuto + quantita >= capacita)
    	    contenuto = capacita;
    	  else
    	    contenuto = contenuto + quantita;
      }
      public void svuota() {
        contenuto = 0;
      }
    }
    a) Scrivete un programma UsoArchivio che crea un archivio a1 che può contenere 15 libri e lo riempie per due quinti.
    b) Crea un archivio a2 che può contenere 5 libri e ci deposita 3 volumi
    c) travasa l'archivio a2 dentro a a1
    d) stampa il contenuto dei due archivi
    codice:
    class UsoArchivio {
      public static void main(String[] args) {
           Archivio a1 = new Archivio(15);
    	a1.riempi(((15*2)/5));
    	Archivio a2 = new Archivio(5);
    	a2.riempi(3);
    	a2.svuota();
    	a1.riempi(3);
    	System.out.println(a1.getContenuto()+" "+a2.getContenuto());
      }
    }
    // Qui ho soltanto un dubbio lui dice "travasa" ma secondo me non si può fare di "travasare" esattamente il contenuto almeno di non creare un metodo apposta oppure un archivio apposta... voi che ne dite?dovrei creare un archivio apposta da travaso? in quest'utlimo caso come potrei fare ad impostare la capacità di archivio a2 nell'archivio "travaso"?

    Es. 2 Modificate il metodo riempi dell'esercizio 1 per far lanciare l'eccezione ArchivioPieno...

    codice:
    class ArchivioPieno extends Exception {
      private int eccedonoLaCapacita;
      public ArchivioPieno(int eccedonoLaCapacita) {
        this.eccedonoLaCapacita = eccedonoLaCapacita;
      }
      public String toString() {
        return eccedonoLaCapacita + " elementi di " + "troppo! Non verranno inseriti.";
      }
    }
    Io sono arrivato qui:

    codice:
      public void riempi(int quantita) {
    	  if((quantita > 0 ) && ( contenuto + quantita <= capacita)) {
    		  contenuto = contenuto + quantita;
    	  }else if ((quantita > capacita) || ( contenuto + quantita > capacita)) {
    		   throw new Exception (ArchivioPieno(capacita));
    	  }
      }
    // tuttavia in fase di compilazione di da il seguente errore:

    Archivio.java:27: cannot find symbol
    symbol : method ArchivioPieno(int)
    location: class Archivio
    throw new Exception (ArchivioPieno(capacita));
    ^
    1 error
    Compilazione fallita.


    Dimenticavo... ovviamente ho modificato la classe UsoArchivio in questo modo:
    codice:
    class UsoArchivio {
      public static void main(String[] args) {
        Archivio a1 = new Archivio(15);
    	a1.riempi(((15*2)/5));
    	Archivio a2 = new Archivio(5);
    	a2.riempi(3);
    	a2.svuota();
    	a1.riempi(3);
    	
    	try {
    		a1.riempi(15);
    	}catch(Exception b) {
    		System.out.println(b);
    	}
    	System.out.println(a1.getContenuto()+" "+a2.getContenuto());
      }
    }
    Es 3 Scrite il programma UitlitaArchivio con un metodo di classe capacita che dato un archivio passato come parametro, restituisce la capacità.
    Potete usare indifferentemente la versione di Archivio dell'esercizio 1 o quella dell'esercizio 2


    E sono arrivato qui... senza errori in compilazione...
    codice:
    class UtilitaArchivio  {
       
       private int capacita;
       
       public int capacita (Archivio a) {
          this.capacita = capacita;
       return capacita;
       }
       
    }
    Tuttavia mi chiedevo se fosse più giusto estendere la classe Archivio con extends ? in quel caso però mi da un errore...

    Es 4 Costuire un'interfaccia grafica che dato un Archivio passato come parametro al costruttore, mostra una finestra con un'etichetta in alto che mostra il contenuto dell'archivio, un'etichetta in basso che mostra la pacaità dell'archivio(esercizio3) e un pulsante al centro per aggiungere un elemento all'archivio.

    codice:
    import java.awt.*;
    class GuiArchivio extends Frame {
        
    	private Frame f;
    	private Panel p;
    	private Panel p1;
    	private Panel p2;
    	private Label etic;
    	private Label etic2;
    	private Button b;
    	
      public GuiArchivio (Archivio a) {
        
    	super("GuiArchivio");
    	this.f = new Frame();
    	this.p = new Panel();
    	this.p1= new Panel();
    	this.p2= new Panel();
    	
    	this.etic = new Label(" "+a.getContenuto()+" ");
    	this.p.add(etic);
    	this.f.add(p,BorderLayout.NORTH);
    	
        this.etic2 = new Label(" "+UtilitaArchivio.capacita(a)+" ");
    	this.p1.add(etic2);
    	this.f.add(p1,BorderLayout.SOUTH);
    	
    	this.b = new Button("Aggiungi elemento");
    	this.p2.add(b);
    	this.f.add(p2,BorderLayout.CENTER);
    	
    	this.pack();
    	this.setVisible(true);
    	}
    	
    	public static void main(String[] args) {
    		Archivio a = new Archivio(15);
    		GuiArchivio b = new GuiArchivio(a);
        }
        
    }
    E quan invece ci son dei problemi il primo è l'errore in compilazione:

    GuiArchivio.java:24: non-static method capacita(Archivio) cannot be referenced from a static context
    this.etic2 = new Label(" "+UtilitaArchivio.capacita(a)+" ");
    ^
    1 error
    Compilazione fallita.


    E capisco di aver sbagliato l'invocazione del metodo di classe... o fatto varie prove ma non ho ottenuto risultati...

    E mettendo come commento la riga comunque mi da un errore di tipo null in fase di esecuzione e non mi crea alcuna finestra... :master:

    Ci sarebbe anche un 5 es..ma mi basta riuscire a completare questi...
    Grazie alla buon'anima che avrà voglia d'aiutarmi...
    Sarà, ma finché non funziona... non è migliorabile!

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

    Re: Parametri tra classi...

    Originariamente inviato da Luca1986
    // Qui ho soltanto un dubbio lui dice "travasa" ma secondo me non si può fare di "travasare" esattamente il contenuto almeno di non creare un metodo apposta oppure un archivio apposta...
    Perché no?? Per come è implementato, hai getContenuto() e riempi(). Se vuoi "travasare" da A a B, prendi il contenuto da A, riempi B, svuoti A. Tutto qui.

    Originariamente inviato da Luca1986
    codice:
    class ArchivioPieno extends Exception {
      private int eccedonoLaCapacita;
      public ArchivioPieno(int eccedonoLaCapacita) {
        this.eccedonoLaCapacita = eccedonoLaCapacita;
      }
      public String toString() {
        return eccedonoLaCapacita + " elementi di " + "troppo! Non verranno inseriti.";
      }
    }
    Sarebbe più appropriato non fare l'override di toString() ma passare la stringa che componi al super-costruttore con una invocazione super(...blabla...). Se poi vuoi tenere una variabile di istanza per la eccedenza e fornire un metodo "getter" per permettere la lettura della eccedenza come numero .... beh, è un qualcosa cosa di più, ok.

    Originariamente inviato da Luca1986
    codice:
      public void riempi(int quantita) {
    	  if((quantita > 0 ) && ( contenuto + quantita <= capacita)) {
    		  contenuto = contenuto + quantita;
    	  }else if ((quantita > capacita) || ( contenuto + quantita > capacita)) {
    		   throw new Exception (ArchivioPieno(capacita));
    	  }
      }
    E' sbagliata la forma dopo throw new e comunque si può semplificare:

    codice:
    if (quantita > 0) {
        if (contenuto + quantita > capacita) {
            throw new ArchivioPieno(contenuto + quantita - capacita);
        }
        
        contenuto = contenuto + quantita;
    }
    Nota che se la quantità passata fa eccedere, viene lanciata la eccezione e l'archivio non viene toccato. Se invece volevi che se la capacità fa eccedere venga comunque aggiunto il massimo possibile senza eccedere e poi venga lanciata la eccezione, si può anche fare ma in modo ancora diverso.



    Originariamente inviato da Luca1986
    Es 3 Scrite il programma UitlitaArchivio con un metodo di classe capacita che dato un archivio passato come parametro, restituisce la capacità.
    Potete usare indifferentemente la versione di Archivio dell'esercizio 1 o quella dell'esercizio 2


    E sono arrivato qui... senza errori in compilazione...
    codice:
    class UtilitaArchivio  {
       
       private int capacita;
       
       public int capacita (Archivio a) {
          this.capacita = capacita;
       return capacita;
       }
       
    }
    Tuttavia mi chiedevo se fosse più giusto estendere la classe Archivio con extends ? in quel caso però mi da un errore...
    Non ha senso come l'hai implementato .... l'archivio dove lo usi??? Non vedo l'uso!! A cosa serve la variabile di istanza 'capacita'??? A nulla.

    E il testo dice espressamente: "con un metodo di classe" .... quindi non un metodo di istanza!!! Semplicemente basta 1 metodo statico che restituisce la capacità dell'archivio. E nessuna variabile né di classe né di istanza.



    Originariamente inviato da Luca1986
    Es 4 Costuire un'interfaccia grafica che dato un Archivio passato come parametro al costruttore, mostra una finestra con un'etichetta in alto che mostra il contenuto dell'archivio, un'etichetta in basso che mostra la pacaità dell'archivio(esercizio3) e un pulsante al centro per aggiungere un elemento all'archivio.

    E quan invece ci son dei problemi il primo è l'errore in compilazione
    Il problema nasce dal fatto che hai implementato male e senza seguire la precisazione del testo di prima la classe UtilitaArchivio.

    E comunque l'oggetto Archivio passato al costruttore di GuiArchivio ti conviene tenerlo tra le variabili di istanza ... visto che a seguito del click sul pulsante devi poi accedere nuovamente all'archivio.

    Devi anche implementare e registrare un ActionListener per il pulsante.
    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 2009
    Messaggi
    37
    1) ok ho risolto con:

    codice:
    a1.riempi(a2.getContenuto());
    a2.svuota();
    2)
    Sarebbe più appropriato non fare l'override di toString() ma passare la stringa che componi al super-costruttore con una invocazione super(...blabla...). Se poi vuoi tenere una variabile di istanza per la eccedenza e fornire un metodo "getter" per permettere la lettura della eccedenza come numero .... beh, è un qualcosa cosa di più, ok.
    Questa parte di codice era data dal testo cmq...

    if (quantita > 0) {
    if (contenuto + quantita > capacita) {
    throw new ArchivioPieno(contenuto + quantita - capacita);
    }

    contenuto = contenuto + quantita;
    }
    Sarà anche più semplice, tuttavia il problema rimane...
    E' sbagliata la forma dopo throw new e comunque si può semplificare:
    Che la forma fosse sbagliata l'avevo intuito... sai suggerirmi la forma corretta? Visto che ho provato a usare la tua ma continua a darmi errore?
    E' possibile che sia sbagliata la forma del main? e da quella derivi l'errore?

    3)
    Nel testo c'è scritto:

    Scrivete il PROGRAMMA UTILITAARCHIVIO per me scrivere un programma è equivalente ad una classe con dentro un metodo o il main, dico bene?
    Se mi dice crea un programma con un metodo di classe per me è evidente che vuole una classe UtilitaArchivio e un Metodo di Quella classe... non un metodo della classe Archivio...
    Giusto??? Sennò è grave!

    4)
    E comunque l'oggetto Archivio passato al costruttore di GuiArchivio ti conviene tenerlo tra le variabili di istanza ... visto che a seguito del click sul pulsante devi poi accedere nuovamente all'archivio.

    Devi anche implementare e registrare un ActionListener per il pulsante.
    Come faccio a tenere Archivio tra le variabili d'istanza? Visto che per costruire una finestra devo x forza basarmi su un archivio?

    Mettere un ActionListener per il pulsante era il 5 ed ultimo esercizio...

    Es. 5 Aggiungete all'esercizio 4 un ascoltatore per far in modo che quando si clicca sul pulsante, l'etichetta del contenuto venga aggiornata. Potete usare indifferentemente la versione di Archivio dell'esercizio 1 o quella dell'esercizio 2.

    Che avrei fatto una volta completati gli altri...

    Comunque OT Mi dispiace di non padroneggiare java a livelli mostruosi e "rompere" con queste cose...

    Ma sarà una mia impressione
    ma sarai stato di cattivo umore quando hai deciso di commentare i miei post???
    Infondo se non ti andava potevi lasciare vuoto?...:master:
    Comunque grazie...
    Sarà, ma finché non funziona... non è migliorabile!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Luca1986
    Che la forma fosse sbagliata l'avevo intuito... sai suggerirmi la forma corretta?
    La forma corretta tecnicamente è:

    throw new ArchivioPieno(unValoreInt);

    Poi ovviamente devi sapere tu quale "espressione" passare al costruttore.


    Originariamente inviato da Luca1986
    Visto che ho provato a usare la tua ma continua a darmi errore?
    Ehm ... errore dove? quale errore?

    Originariamente inviato da Luca1986
    Se mi dice crea un programma con un metodo di classe per me è evidente che vuole una classe UtilitaArchivio e un Metodo di Quella classe... non un metodo della classe Archivio...
    Giusto??? Sennò è grave!
    Direi che è molto grave che non conosci la differenza tra membri "di istanza" e membri "di classe". Nota che in generale per "membri" si intende sia metodi che variabili (anche classi "innestate" ma qui andiamo su discorsi più complicati .... meglio tralasciare per il momento).

    Un membro "di istanza" è un metodo o variabile non static ed è associato ad ogni istanza (oggetto) specifica della classe. Un membro "di classe" è un metodo o variabile static ed è associato alla classe, non ad ognuna delle istanze della classe.
    Il main() (il metodo principale di una applicazione) è ad esempio un metodo "di classe".

    Originariamente inviato da Luca1986
    Come faccio a tenere Archivio tra le variabili d'istanza? Visto che per costruire una finestra devo x forza basarmi su un archivio?
    codice:
    private Archivio a;
    
    public GuiArchivio (Archivio a) {
        ....
        this.a = a;
        ....
    }
    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 2009
    Messaggi
    37
    Allora...............................

    Es. 2 Modificate il metodo riempi dell'esercizio 1 per far lanciare l'eccezione ArchivioPieno...

    Questa è la classe del TDA Archivio...

    codice:
    class Archivio {
      private int contenuto;
      private int capacita;
      public Archivio(int capacita) {
        this.capacita = capacita;
    	contenuto = 0;
      }
      public int getContenuto() {
        return contenuto;
      }
      
      public void riempi(int quantita) {
    	  if (quantita > 0) {
             if (contenuto + quantita > capacita) {
        			throw new ArchivioPieno(contenuto + quantita - capacita); // il prob. è qui ovviamente...
             } 
          contenuto = contenuto + quantita;
     	  }
      }
      
      public void svuota() {
        contenuto = 0;
      }
    }
    e mi genera il seguente ERRORE in compilazione

    Archivio.java:15: unreported exception ArchivioPieno; must be caught or declared to be thrown
    throw new ArchivioPieno(contenuto + quantita - capacita);
    ^
    1 error
    Compilazione fallita.


    La classe UsaArchivio l'ho scritta così:
    codice:
    class UsoArchivio {
      public static void main(String[] args) {
        Archivio a1 = new Archivio(15);
    	a1.riempi(((15*2)/5));
    	Archivio a2 = new Archivio(5);
    	a2.riempi(3);
    	a1.riempi(a2.getContenuto());
    	a2.svuota();
    	try {
    	      a1.riempi(15);
    	}catch(Exception a) {
    		System.out.println(a2.toString()); // ho qualche dubbio su questa riga...
    	}
    	System.out.println(a1.getContenuto()+" "+a2.getContenuto());
       }
    }
    e mi da il seguente errore :

    javac "UsoArchivio.java" (nella cartella: /home/luca/Scrivania/AWT e GUI)
    ./Archivio.java:15: unreported exception ArchivioPieno; must be caught or declared to be thrown
    throw new ArchivioPieno(contenuto + quantita - capacita);
    ^
    1 error
    Compilazione fallita.


    La classe ArchivioPieno che dovrebbe essere usata come eccezione...
    codice:
    class ArchivioPieno extends Exception {
      private int eccedonoLaCapacita;
      public ArchivioPieno(int eccedonoLaCapacita) {
        this.eccedonoLaCapacita = eccedonoLaCapacita;
      }
      public String toString() {
        return eccedonoLaCapacita + " elementi di " + "troppo! Non verranno inseriti.";
      }
    }
    Questa non mi segnala errore l'ho messa per completezza..


    Es 3 Scrite il programma UitlitaArchivio con un metodo di classe capacita che dato un archivio passato come parametro, restituisce la capacità.
    Potete usare indifferentemente la versione di Archivio dell'esercizio 1 o quella dell'esercizio 2


    La classe UtilitaArchivio...
    codice:
    class UtilitaArchivio  {   
       private int capacita;   
       public int getCapacita() {
    	   return capacita;
       }   
       public static int capacita (Archivio a) {
        Archivio b = a;
    	int x = b.getCapacita();
    	return x;
       }
       // non ho la minima idea di come fare a tirare fuori la variabile capacita dal tda archivio
       // passato come parametro      
    }
    Mi da il seguente errore...

    javac "UsoArchivio.java" (nella cartella: /home/luca/Scrivania/AWT e GUI)
    ./Archivio.java:15: unreported exception ArchivioPieno; must be caught or declared to be thrown
    throw new ArchivioPieno(contenuto + quantita - capacita);
    ^
    1 error
    Compilazione fallita.

    avevo dimenticato uno static...


    Es 4 Costuire un'interfaccia grafica che dato un Archivio passato come parametro al costruttore, mostra una finestra con un'etichetta in alto che mostra il contenuto dell'archivio, un'etichetta in basso che mostra la pacaità dell'archivio(esercizio3) e un pulsante al centro per aggiungere un elemento all'archivio.


    La classe GUI che dovrebbe creare l'interfaccia... ma da uno strano errore
    codice:
    import java.awt.*;
    class GuiArchivio extends Frame {
        private Frame f;
    	private Panel p;
    	private Panel p1;
    	private Panel p2;
    	private Label etic;
    	private Label etic2;
    	private Button b;
    	private Archivio a;
      
      public GuiArchivio (Archivio a) {
        super("GuiArchivio");
    	this.a = a;
    	
    	setBounds(100,100,300,200);
    	this.f = new Frame();
    	this.p = new Panel();
    	this.p1= new Panel();
    	this.p2= new Panel();
    	
    	this.etic = new Label(" "+a.getContenuto()+" ");
    	this.p.add(etic);
    	this.f.add(p,BorderLayout.NORTH);
    	
        this.etic2 = new Label(" "+UtilitaArchivio.capacita(a)+" ");
    	this.p1.add(etic2);
    	this.f.add(p1,BorderLayout.SOUTH);
    	
    	this.b = new Button("Aggiungi elemento");
    	this.p2.add(b);
    	this.f.add(p2,BorderLayout.CENTER);
    	
    	this.pack();
    	this.setVisible(true);
    	}
    	
    	public static void main(String[] args) {
    		Archivio a = new Archivio(15);
    		GuiArchivio b = new GuiArchivio(a);
        }
        
    }
    se metto tra // this.etic2 = new Label(" "+UtilitaArchivio.capacita(a)+" ");
    non mi da errori in compilazione però non riesce ad crearmi nessuna finestra... e mi da:

    Java.lang.nullPointerException... ecc..
    Sarà, ma finché non funziona... non è migliorabile!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Luca1986
    Es. 2 Modificate il metodo riempi dell'esercizio 1 per far lanciare l'eccezione ArchivioPieno...

    e mi genera il seguente ERRORE in compilazione
    [I]
    Archivio.java:15: unreported exception ArchivioPieno; must be caught or declared to be thrown
    ArchivioPieno è una eccezione "checked", perché estende Exception (e non è nel sottoramo RuntimeException). Pertanto se vuoi che la eccezione possa "uscire" dal metodo riempi(), allora devi dichiarare la eccezione con il throws. Ed essendo appunto la eccezione "checked", chi invocherà il metodo riempi() a sua volta dovrà o dichiararla con il throws per farla "uscire" ancora più "sopra" oppure catturarla e gestirla.

    Originariamente inviato da Luca1986

    Es 4 Costuire un'interfaccia grafica che dato un Archivio passato come parametro al costruttore, mostra una finestra con un'etichetta in alto che mostra il contenuto dell'archivio, un'etichetta in basso che mostra la pacaità dell'archivio(esercizio3) e un pulsante al centro per aggiungere un elemento all'archivio.


    se metto tra // this.etic2 = new Label(" "+UtilitaArchivio.capacita(a)+" ");
    non mi da errori in compilazione però non riesce ad crearmi nessuna finestra... e mi da:

    Java.lang.nullPointerException... ecc..
    Nota innanzitutto che la tua classe estende Frame ma al suo interno istanzi un altro Frame. Devi decidere .... o usi il tuo oggetto GuiArchivio che è-un Frame oppure ne crei uno.

    E comunque per via di questo fatto hai creato casino .... gli add() li fai sul frame 'f', il setVisible lo fai sul 'this' che è il tuo oggetto GuiArchivio (Frame).

    Rivedi bene il codice e fai la cosa in modo più "pulito".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    37
    Potresti farmi un esempio di dichiarazione di eccezione che non sia runtime? perchè credo di non averle mai affrontate, e non ho nulla a riguardo sul libro di testo... (introduzione alla programmaz..)

    Si potrei vedere la documentazione online in inglese... però se mi fai un es. in italiano preferirei.. poi vedi tu se combini... altrimenti domani vedo...

    ....

    Ho corretto il "doppio frame" tuttavia continua a non generarmi niente solo l'errore di null...

    codice:
    import java.awt.*;
    
    class GuiArchivio extends Frame {
       	private Panel p;
    	private Panel p1;
    	private Panel p2;
    	private Label etic;
    	private Label etic2;
    	private Button b;
    	private Archivio a;
      
      public GuiArchivio (Archivio a) {
        super("GuiArchivio");
    	this.a = a;
    	this.setBounds(100,100,300,200);
    	this.p = new Panel();
    	this.p1= new Panel();
    	this.p2= new Panel();
    	this.etic = new Label(" "+a.getContenuto()+" ");
    	this.p.add(etic);
    	this.add(p,BorderLayout.NORTH);
    	
        //this.etic2 = new Label(" "+UtilitaArchivio.capacita(a)+" ");
    	this.p1.add(etic2);
    	this.add(p1,BorderLayout.SOUTH);
    	
    	this.b = new Button("Aggiungi elemento");
    	this.p2.add(b);
    	this.add(p2,BorderLayout.CENTER);
    	
    	this.pack();
    	this.setVisible(true);
    	}
    	
    	public static void main(String[] args) {
    		Archivio a = new Archivio(15);
    		GuiArchivio b = new GuiArchivio(a);
        }
        
    }
    Ho dimenticato qualcosa??
    i this nei panel sono "inutili" ?
    li ho provati a mettere/togliere .........
    (alla fine non specificano solo "usa questa istanza di xxx che hai????" il risultato è cmq lo stesso non si vede una mazza... cosa manca o è sbagliato?...

    Spero non mi capiti una roba così all'esame senno son fregato..
    Sarà, ma finché non funziona... non è migliorabile!

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Luca1986
    Potresti farmi un esempio di dichiarazione di eccezione che non sia runtime? perchè credo di non averle mai affrontate, e non ho nulla a riguardo sul libro di testo... (introduzione alla programmaz..)
    Argomento che dovresti assolutamente affrontare quello delle eccezioni .... comunque esistono eccezioni "checked" e "unchecked". Quelle checked sono tutte quelle che estendono Exception ad esclusione del sottoramo RuntimeException.
    "checked" vuol dire che la eccezione deve essere presa in considerazione, in un modo o nell'altro. Se un metodo A invoca un metodo B e B dichiara di lanciare una eccezione checked, allora A deve: o catturarla e gestirla in qualche modo oppure dichiarare a sua volta con il throws che lancia la eccezione (quindi può "uscire" fuori da A). O anche un mix, in certi casi è appropriato catturare la eccezione e poi rilanciarla fuori.
    Le eccezioni "unchecked" non hanno questi vincoli: non sei obbligato a catturarle/gestirle e nemmeno a dichiararle con il throws (ovviamente puoi fare queste cose ... ma non c'è l'obbligo).

    Originariamente inviato da Luca1986
    Si potrei vedere la documentazione online in inglese... però se mi fai un es. in italiano preferirei.. poi vedi tu se combini... altrimenti domani vedo...
    In che senso in italiano???

    Se vuoi dichiarare una eccezione si mette dopo la ) di chiusura dei parametri un throws NomeEccezione (più eccezioni separate da virgola).

    codice:
    public void blabla() throws UnaEccezione, AltraEccezione {
        ...
    }
    Originariamente inviato da Luca1986
    Ho corretto il "doppio frame" tuttavia continua a non generarmi niente solo l'errore di null...

    Ho dimenticato qualcosa??
    La riga in cui istanzi il Label e assegni a etic2 è "commentata" e quindi etic2 resta null. Ed è un errore perché l'add() appena seguente non accetta un null!

    Originariamente inviato da Luca1986
    i this nei panel sono "inutili" ?
    Il 'this' generalmente è superfluo, quindi molti di quei 'this' che hai messo li puoi anche togliere (e sarebbe più pulito).

    Un caso in cui servono è quando devi risolvere il problema dello "shadowing". Nel costruttore, solo indicare 'a' fa riferimento al parametro Archivio a, non alla variabile di istanza 'a'.
    Questo perché il parametro che ha lo stesso nome "nasconde" la variabile di istanza.
    Per accedere alla variabile di istanza nel costruttore devi appunto usare 'this.a', quindi è per forza necessario fare:

    this.a = a;
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    37
    Ho affrontato le eccezioni ( se così si può dire) circa 2 pagine... ( dimmi te!), io so solo che se c'è la possibilità che venga creata un'eccezione dal metodo allora conviene catturarla il prima possibile in modo da non farla rimbalzare di qua e di la..

    Grazie per la precisazione checked e non...

    In italiano nel senso della "spiegazione" del suo utilizzo!

    Non ci crederai!! Ho risolto quasi tuttooooooooooo!! (F******o al mio libro!)

    codice:
    class UsoArchivio {
      public static void main(String[] args) {
        	Archivio a1 = new Archivio(15);
    	Archivio a2 = new Archivio(5)
    	try {
    	a1.riempi(((15*2)/5));
    	a2.riempi(3);
    	a1.riempi(a2.getContenuto());
    	a2.svuota();
    	System.out.println(a1.getContenuto()+" "+a2.getContenuto());		
    	a1.riempi(16);
    	}catch(Exception ArchivioPieno) {
    		System.out.println(ArchivioPieno.toString());
    	}
    	System.out.println(a1.getContenuto()+" "+a2.getContenuto());
      }  
    }
    codice:
      public void riempi(int quantita) throws ArchivioPieno {	  
    	  if ((quantita > 0)&&(contenuto + quantita <= capacita)) {
    		  contenuto = contenuto + quantita;
    	 }else if ((quantita > capacita ) || (contenuto + quantita > capacita)) {
    		throw new ArchivioPieno(contenuto + quantita - capacita);
          } 
      } // so che mi hai dato una versione + semplificata ma ho provato a usare la mia...
    Ora mi manca solo 1a maledetta cosa... ovvero

    Es 3 Scrite il programma UitlitaArchivio con un metodo di classe capacita che dato un archivio passato come parametro, restituisce la capacità. Potete usare indifferentemente la versione di Archivio dell'esercizio 1 o quella dell'esercizio 2 La classe UtilitaArchivio...
    codice:
    class UtilitaArchivio  {   
       private int capacita;   
       public int getCapacita() {
    	   return capacita;
       }   
       public static int capacita (Archivio a) {
        Archivio b = a;
    	int x = b.getCapacita();
    	return x;
       }
       // non ho la minima idea di come fare a tirare fuori la variabile capacita dal tda archivio
       // passato come parametro      
    }
    Come faccio ad accedere a una variabile Private (capacita) di un'altra classe (Archivio) senza poter creare un metodo getCapacita nella classe Archivio?
    Posso estendere la classe con un extends?? Però facendolo mi dice che non riesce a trovare il costruttore Archivio ()... Come potrei fare per "importare" il costruttore??
    Usare un super??
    Altri modi ?
    Consigli??

    e l'ascoltatore, ma quello mi metto subito a farlo e non dovrei avere grossi problemi...
    Sarà, ma finché non funziona... non è migliorabile!

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Luca1986
    Ho affrontato le eccezioni ( se così si può dire) circa 2 pagine... ( dimmi te!)
    Pochino .....

    Originariamente inviato da Luca1986
    conviene catturarla il prima possibile in modo da non farla rimbalzare di qua e di la..
    Sbagliato o per lo meno ... prima bisogna vedere il "design" delle tue classi.

    Originariamente inviato da Luca1986
    Come faccio ad accedere a una variabile Private (capacita) di un'altra classe (Archivio) senza poter creare un metodo getCapacita nella classe Archivio?
    Non puoi.

    Originariamente inviato da Luca1986
    Posso estendere la classe con un extends??
    Sì, se la classe è "visibile", non è final ed ha un costruttore accessibile alle sottoclassi è certamente possibile, a livello tecnico, fare la estensione.

    Ma non ti servirebbe per accedere al campo private. Un membro private non è visibile dalle sottoclassi!!!

    Originariamente inviato da Luca1986
    Però facendolo mi dice che non riesce a trovare il costruttore Archivio ()... Come potrei fare per "importare" il costruttore??
    I costruttori non si "importano" ....

    Originariamente inviato da Luca1986
    Usare un super??
    Visto che Archivio ha un costruttore che riceve un argomento, nel costruttore di una sottoclasse si deve invocare super(valoreDaPassare); ovviamente.

    Ma probabilmente stai cercando la strada sbagliata, la estensione intendo.
    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.