Salve a tutti,
ho creato un vector per l'inserimento di dati anagrafici delle persone per poi ordinarle per cognome. Questi dati sono presenti in una classe chiamata anagrafica mentre il vector è nella classe lista, il problema è che durante l'inserimento ad esempio di solamente due persone, la prima la salva, la seconda anche ma due volte: sostituisce la persona inserita la prima volta per poi inserirsi nella posizione 2 del vector, ho provato ad usare la funzione insertElementAt indicando la posizione precisa dell'inserimento delle persone dopo la prima ma nientequesto è il codice così potete capire meglio:
import java.io.*;
import java.util.*;
public class ordinamento_dinamico {
public static void main(String[] args) {
InputStreamReader input=new InputStreamReader(System.in);
BufferedReader tastiera=new BufferedReader(input);
anagrafica persona=new anagrafica();
lista lista_persone = new lista();
int scelta;
String m = null;
do{
persona.inserimento();
lista_persone.aggiungi(persona);
System.out.println("Inserito");
System.out.println("Vuoi inserire un'altra persona? 0=si, 1=no");
try {
m=tastiera.readLine();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
scelta=Integer.valueOf(m).intValue();
//lista_persone.ordina();
}while(scelta==0);
lista_persone.stampa(persona);
}
}
public class lista {
private static Vector elementi;
lista(){
elementi=new Vector();
}
public void aggiungi(anagrafica obj){
elementi.addElement(obj);
//elementi.insertElementAt(obj,i);
System.out.println("Inserito");
}
public anagrafica elimina(anagrafica obj){
if(!vuota()){
int dim=elementi.size();
if(dim>0){
obj=(anagrafica)elementi.elementAt(0);
elementi.removeElementAt(0);
}
}
else
System.out.println("LISTA VUOTA");
return obj;
}
public boolean vuota(){
if(elementi.size()>0)
return false;
else
return true;
}
/*public void ordina(){
int dim=elementi.size();
anagrafica buffer=new anagrafica();
anagrafica first=new anagrafica();
if(!vuota())
for(int i=0;i<dim-1;i++){
buffer=(anagrafica) elementi.elementAt(i);
for(int j=i+1;j<dim;j++){
first=(anagrafica) elementi.elementAt(j);
if(buffer.cognome.compareTo(first.cognome)>=0){
elementi.setElementAt(first,i);
elementi.setElementAt(buffer,j);
}
}
}
else
System.out.println("LISTA VUOTA");
}*/
public void stampa(anagrafica buffer){
int i;
int n=elementi.size();
System.out.println("\nLa lista di persone ordinata Ë:");
for(i=0;i<n;i++){
buffer=(anagrafica)elementi.elementAt(i);
System.out.println("Persona "+(i+1)+": "+buffer.cognome+" "+buffer.nome+" nato il "+buffer.gg+"/"+buffer.mm+"/"+buffer.a);
}
}
}
public class anagrafica {
String nome,cognome;
int gg,mm,aaaa;
String g,m,a;
anagrafica(){
nome=" ";
cognome=" ";
gg=0; mm=0; aaaa=0;
}
void inserimento(){
InputStreamReader input=new InputStreamReader(System.in);
BufferedReader tastiera=new BufferedReader(input);
System.out.println("\nImmetti il nome");
try {
this.nome=tastiera.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("\nImmetti il cognome");
try {
this.cognome=tastiera.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("\nImmetti la data di nascita");
System.out.println("Giorno:");
try {
g=tastiera.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.gg=Integer.valueOf(g).intValue();
System.out.println("Mese:");
try {
m=tastiera.readLine();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.mm=Integer.valueOf(m).intValue();
System.out.println("Anno:");
try {
a=tastiera.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.aaaa=Integer.valueOf(a).intValue();
}
}

questo è il codice così potete capire meglio:
Rispondi quotando