View Full Version : [java] primo esercizio
thewebsurfer
18-05-2008, 15:53
salve come è facile immaginare è il mio primo esercizio di java (quando il prof è arrivato alle interfacce grafiche..vabbè:stordita: )
package banca;
public class Banca {
public static void main (String[] args){
Conto contobanca = new Conto(10);
contobanca.aggiungi(1000);
contobanca.sottrai(50);
System.out.println("il saldo è " + contobanca);
}
public class Conto{
int saldo;
public Conto(int saldoiniziale){
saldo = saldoiniziale;
}
public void aggiungi(int x){
int nuovosaldo = x + saldo;
saldo= nuovosaldo;
}
public void sottrai (int x){
int nuovosaldo = saldo - x;
saldo = nuovosaldo;
}
}
}
come vedete è una cretinata...ma c'è un errore, cosa mi è sfuggito alla 5a riga? (Conto contobanca = new Conto(10);)
cosa mi è sfuggito alla 5a riga?Ti è sfuggito che Conto l'hai dichiarata come inner-class, ovvero una classe "innestata". Che ha delle regole particolari e se non le conosci ..... è meglio se per adesso dichiari Conto come classe "top-level", ovvero fuori da ogni classe.
thewebsurfer
18-05-2008, 17:20
Ti è sfuggito che Conto l'hai dichiarata come inner-class, ovvero una classe "innestata". Che ha delle regole particolari e se non le conosci ..... è meglio se per adesso dichiari Conto come classe "top-level", ovvero fuori da ogni classe.
ok:doh:
ho provato a chiudere il main prima di conto, ma mi dava ancora un errore "the public type Conto must be definited in its own file"...cos'è?
se invece faccio un altro file col la classe conto funziona..
khelidan1980
18-05-2008, 17:31
togli public dalla classe conto,poi riguarda il codice mica puoi stampare contobanca,nella classe Conto devi fare override del metodo toString
prova così
package banca;
public class Banca {
public static void main (String[] args){
Conto contobanca = new Conto(10);
contobanca.aggiungi(1000);
contobanca.sottrai(50);
System.out.println("il saldo è " + contobanca);
}
}
class Conto{
int saldo;
public Conto(int saldoiniziale){
saldo = saldoiniziale;
}
public void aggiungi(int x){
int nuovosaldo = x + saldo;
saldo= nuovosaldo;
}
public void sottrai (int x){
int nuovosaldo = saldo - x;
saldo = nuovosaldo;
}
public String toString(){
return "" + saldo;
}
}
thewebsurfer
18-05-2008, 17:47
ma al posto di toString non è più facile (per me:)) stampare contobanca.saldo?:stordita:
ps ora che provo funziona...quindi col punto (.) posso richiamare anche variabili globali oltre che metodi?
secondo me è sempre meglio usare toString piuttosto che richiamare la variabile nel main, comunque se proprio vuoi farlo ricordati che la variabile deve essere dichiarata public(visibile da qualsiasi classe) o protected(visibile da classi dello stesso package) se non scrivi niente come nel tuo codice se non ricordo male dovrebbe porre la variabile automaticamente a protected
khelidan1980
18-05-2008, 18:03
ma al posto di toString non è più facile (per me:)) stampare contobanca.saldo?:stordita:
Assolutamente no,se no l'incapsulamento va a farsi benedire e i motivi sono quelli che ha spiegato gir88,DEVI usare toString...;)
thewebsurfer
18-05-2008, 22:29
Assolutamente no,se no l'incapsulamento va a farsi benedire e i motivi sono quelli che ha spiegato gir88,DEVI usare toString...;)
fammi capire:)
ma per usare sto metodo toString non avrei dovuto stampare contobanca.toString??
xke è corretto stampare l'istanza contobanca della classe Conto così com'è?:confused:
khelidan1980
18-05-2008, 22:43
fammi capire:)
ma per usare sto metodo toString non avrei dovuto stampare contobanca.toString??
xke è corretto stampare l'istanza contobanca della classe Conto così com'è?:confused:
Si ma il metodo toString lo devi scrivere nella classe Conto se no ti invoca il toString ereditato da object,ti scrivo il codice cosi magari capisci meglio:
package banca;
public class Banca {
public static void main (String[] args){
Conto contobanca = new Conto(10);
contobanca.aggiungi(1000);
contobanca.sottrai(50);
System.out.println("il saldo è " + contobanca.toString());
}
}
class Conto{
private int saldo;
public Conto(int saldoiniziale){
saldo = saldoiniziale;
}
public void aggiungi(int x){
int nuovosaldo = x + saldo;
saldo= nuovosaldo;
}
public void sottrai (int x){
int nuovosaldo = saldo - x;
saldo = nuovosaldo;
}
public String toString(){
String result = Integer.toString(saldo);
return result;
}
}
se tu accedi con l'operatore punto a saldo violi l'incapsulamento,teoria dell'oop,e nel caso del mio codice non funzionerebbe perchè saldo è dichiarato private appunto per preservare l'incapsulamento,e ti serve quindi un metodo toString per stampare informazioni sul tuo oggetto,e questo discorso vale anche per leggere o settare saldo,come hai giustamente fatto,seguendo il discorso fatto per toString avresti potuto accedere direttamente anche in quel caso,sbagliando, con l'operatore punto!
anche perchè senza sovrascrivere il metodo toString(), avresti un output del tipo
Conto@5b7hil
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.