PDA

View Full Version : [java] sbaglio la toString?


ndakota
31-01-2008, 14:16
ho fatto questo programmino(ancora devo mettere tutti i controlli) ma ho problemi quando mi stampa la "rubrica"(visto che ancora non salva sui file :D ), uso male la toString? qualcuno può provarlo?

58052

altrimenti il codici sono

Eser1.java:


import java.util.Vector;

public class Eser1 {

public static void main(String args[]) {

int choose;
Vector elenco = new Vector(1, 1);

System.out.println("\tRUBRICA");

menu();

do {

do {

choose = Console.readInt("? ");

if(choose < 1 || choose > 5)
System.out.println("scelta errata. ripeti.");
} while(choose < 1 || choose > 5);

switch(choose) {

case 1:
add(elenco);
break;
case 2:
modify(elenco);
break;
case 3:
delete(elenco);
break;
case 4:
showAll(elenco);
break;
case 5:
break;
}

} while(choose != 5);

}

static void menu() {

System.out.println("1- aggiungi scheda\n2- modifica scheda\n3- elimina scheda");
System.out.println("4- visualizza rubrica\n5- esci");
}

static void add(Vector elenco) {

Persona p = new Persona();
p.name = Console.readLine("inserisci nome: ");
p.number = Console.readLine("inserisci numero: ");
elenco.addElement(p);
}

static void modify(Vector elenco) {

int ind = Console.readInt("inserire numero della scheda da modificare: ");

Persona p = new Persona();
p.name = Console.readLine("inserisci nome: ");
p.number = Console.readLine("inserisci numero: ");

elenco.setElementAt(p, --ind);

}

static void delete(Vector elenco) {

int ind = Console.readInt("inserire numero della scheda da eliminare: ");

elenco.removeElementAt(--ind);

System.out.println("scheda elminata.");
}

static void showAll(Vector elenco) {

Persona p = new Persona();

for(int i = 0; i < elenco.size(); i++) {

p = (Persona) elenco.elementAt(i);
System.out.println(i+1 + "- " + p);
}
}

}



Persona.java:


public class Persona {

public String number;
public String name;

public String toString() {

return name + "\t" + number;
}
}

MEMon
31-01-2008, 14:29
Si ma il problema qual'è?
Magari se postassi anche cosa ti stampa...

banryu79
31-01-2008, 14:32
No, la toString() in class Persona è definita correttamente, devi solo invocarla esplicitamente qui:

static void showAll(Vector elenco) {

Persona p = new Persona();

for(int i = 0; i < elenco.size(); i++) {

p = (Persona) elenco.elementAt(i);
System.out.println(i+1 + "- " + p);
}
}

in questo modo:

System.out.println(i+1 + "- " + p.toString());

Altrimenti ti stampa solo l'indirizzo della reference p.

ndakota
31-01-2008, 14:35
no ma funziona solo che un esempio di stampa:


ivan 347
ciao 123
dio 666
erty 345
asd 17


cioè ogni tanto stampa con la tablatura in mezzo e ogni tanto no.. non capisco con che criterio purtroppo.

banryu79
31-01-2008, 14:39
ivan 347
ciao 123
dio 666
erty 345
asd 17

Nella prima frase blu sballa perchè è un po' blasfema :D
Nella seconda perchè "si tocca", 17 porta male :D

@ERRATA CORRIGE: ho scritto una vaccata sopra, meglio se oggi non posto più, sto crollando dal sonno e sono ai minimi livelli di lucidità (si era già notato? :rolleyes: )

ndakota
31-01-2008, 14:50
ma perchè infatti da quel che ho capito la toString dovrebbe evitare quella chiamata.. cioè dovrebbe definire l'"output" di un oggetto.. e infatti l'esempio faceva
System.out.println(p); grazie al metodo toString ma senza chiamarlo esplicitamente..

boh non capisco.

vladix
31-01-2008, 15:32
ma perchè infatti da quel che ho capito la toString dovrebbe evitare quella chiamata.. cioè dovrebbe definire l'"output" di un oggetto.. e infatti l'esempio faceva
System.out.println(p); grazie al metodo toString ma senza chiamarlo esplicitamente..

boh non capisco.

infatti non devi x forza chiamarlo esplicitamente , ti stampa il reference solo se tu non hai fatto l' "ovveride" ,

ndakota
31-01-2008, 17:07
è quel che ho fatto.. però c'è qualche problemino.. nessuno?

banryu79
31-01-2008, 18:50
Ehmm, prova a dargli due tab di fila e vedi come viene l'allineamento.

wingman87
31-01-2008, 19:18
Ho provato a compilarlo e a me funziona bene mettendo i tuoi stessi input

vladix
01-02-2008, 09:49
Ho provato a compilarlo e a me funziona bene mettendo i tuoi stessi input

anche a me funziona bene , ( dipendera forse da OS o console ?)

astorcas
01-02-2008, 10:06
Io credo dipenda dalla lunghezza del nome che deve stampare.

Se scrivi "asd" e poi tab, il numero si posiziona alla prima tabulazione (che supponiamo è alla "colonna" n°5), quindi ti sembra di vedere solo uno spazio)
Se scrivi "erty" allora premendo tab salterà la prima tabulaizone e si sposterà sulla seconda (che, sempre ipoteticamente parlando, è alla "colonna" n° 10).

Prova a scrivere nomi con numero di lettere uguali e vedi se tabula bene!