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...