Ho questo esercizio:
Ora il codice č fatto, perņ ho un problema, nell'output qualcosa non funziona...certi oggetti vengono dublicati, e non corrispondono i nick...per esempio:codice:Si scriva un programma Java che prenda in input un file contenente una sequenza di righe, ognuna contenente le informazioni relative ad un punteggio di giuoco, e costruisca la classifica dei primi cento punteggi ottenuti. Ogni riga del file contiene una sequenza di opzioni seguiti dai relativi valori. Le varie opzioni devo essere interpretate nel modo seguente: -nick: seguito da una stringa con il nickname del giocatore (č sempre presente). -p: seguito da un intero che indica il punteggio complessivo (č sempre presente). -a: seguito da un intero, indica l'etą del giocatore. -i: seguito da una data, indica la data d'iscrizione del giocatore. -n: seguito da un intero, indica il numero di partite giocate dal giocatore. -u: seguito da un intero, indica l'ultimo punteggio ottenuto dal giocatore. -dp: seguito da una data, indica la data in cui č stato totalizzato il punteggio. -bonus: non seguito da alcun valore, indica che il giocatore ha un bonus. Tutte le righe finiscono con un punto e virgola preceduto da uno spazio. In caso di parimerito deve apparire per primo il giocatore che appare per prima nella lista di input. Specifiche Utilizzare un oggetto Builder per la costruzione degli oggetti contenuti nella classifica di giuoco. Gli oggetti contenuti nella classifica devono essere definiti come oggetti immutabili Utilizzare i metodi toString() per la descrizione degli oggetti. Input Il file di input contiene una sequenza di righe, ognuna contenente le informazioni relative ad un punteggio di giuoco. Il file di output contiene la classifica dei primi cento giocatori che hanno ottenuto il punteggio pił alto. Ogni riga del file contiene l'informazione su ogni posizione della classifica. Il primo elemento di ogni riga č la posizione della classifica racchiuso traparentesi quadre e seguito da uno spazio. Seguono il nickname del giocatore ed il punteggio ottenuto, separati da una virgola e racchiusi tra parentesi tonda. I successivi valori sono tutti separati da una virgola e possono non essere presenti. In particolare l'ordine e la descrizione dei valori deve seguire l'esempio mostrato di seguito. [***] (***, ***), nome : ***, *** anni, punteggio ottenuto il ****, *** partite giocate, iscritto dal ***, ultimo punteggio ottenuto : ***, bonus utilizzato
Per alcuni come vedete non c'č corrispondenza di nick e parametri, ma non ho capito da cosa dipenda...posto l'intero codice commentato, se mi poteste aiutare ve ne sarei grato.codice:[1] (GDEANGELIS, 9994), nome : Matteo MANTOVANI, 29 anni, punteggio ottenuto il 28/7/2010, 5548 partite giocate, iscritto dal 2/4/2009, ultimo punteggio ottenuto : 2778, bonus utilizzato [2] (GPAGANO, 9989), nome : Giacomo PAGANO, 24 anni, punteggio ottenuto il 20/11/2010, 366 partite giocate, iscritto dal 26/4/2009, ultimo punteggio ottenuto : 168, bonus utilizzato [3] (DSERRA, 9978), nome : Dario SERRA, 32 anni, punteggio ottenuto il 6/10/2010, 6914 partite giocate, iscritto dal 2/8/2009, ultimo punteggio ottenuto : 1610, bonus utilizzato [4] (LSANTORO, 9972), nome : Giada VITALE, 38 anni, punteggio ottenuto il 23/10/2010, 8183 partite giocate, iscritto dal 16/10/2009, ultimo punteggio ottenuto : 9281, bonus utilizzato [5] (PMARTINELLI, 9971), nome : Silvia MONTI, 29 anni, punteggio ottenuto il 6/2/2010, 4899 partite giocate, iscritto dal 15/1/2009, ultimo punteggio ottenuto : 1624, bonus utilizzato [6] (GFIORE, 9971), nome : Debora GRECO, 37 anni, punteggio ottenuto il 26/12/2010, 2032 partite giocate, iscritto dal 23/6/2009, ultimo punteggio ottenuto : 435, bonus utilizzato
Classe con il Building
codice:public class Giocatori { private final String nome; private final String nick; private final int p; private final int a; private final String i; private final int n; private final int u; private final String dp; private final boolean bonus; public static class Builder { private final String nick; private final int p; public Builder(String nick, int p) { this.nick=nick; this.p=p; } private String nome=""; private int a=-1; private String i=""; private int n=-1; private int u=-1; private String dp=""; private boolean bonus=false; public Builder nome(String nome) { this.nome=nome; return this; } public Builder a(int a) { this.a=a; return this; } public Builder i(String i) { this.i=i; return this; } public Builder n(int n) { this.n=n; return this; } public Builder u(int u) { this.u=u; return this; } public Builder dp(String dp) { this.dp=dp; return this; } public Builder bonus(String bonus) { if(bonus.equals("-bonus")) this.bonus=true; return this; } public Giocatori build() { return new Giocatori(this); } } private Giocatori(Builder builder) //perchč non public? { nick=builder.nick; p=builder.p; a=builder.a; i=builder.i; n=builder.n; u=builder.u; dp=builder.dp; bonus=builder.bonus; nome=builder.nome; } public String toString() { String ret="("+nick+", "+p+")"; if(nome.compareTo("")!=0) ret+=", nome : "+nome; if(a!=-1) ret+=", "+a+" anni"; if(dp.compareTo("")!=0) ret+=", punteggio ottenuto il "+dp; if(n!=-1) ret+=", "+n+" partite giocate"; if(i.compareTo("")!=0) ret+=", iscritto dal "+i; if(u!=-1) ret+=", ultimo punteggio ottenuto : "+u; if(bonus) ret+=", bonus utilizzato"; return ret; } }codice:import java.io.*; import java.util.StringTokenizer; public class Intestaallaclassifica { public static void main(String [] args) throws IOException { FileReader reader=null; FileWriter out=null; BufferedReader buff=null; StringTokenizer info=null; String nome=""; String nick=""; int p=-1; int a=-1; String i=""; int n=-1; int u=-1; String dp=""; boolean bonus=false; String contrlbonus=""; try { long start=System.currentTimeMillis(); out=new FileWriter("output.txt"); reader=new FileReader("input.txt"); buff=new BufferedReader(reader); int count=0; int concorrenti=0; while(buff.readLine()!=null) concorrenti++; reader=new FileReader("input.txt"); //reinzializzo per la seconda lettura buff=new BufferedReader(reader); Giocatori [] giocatori=new Giocatori[concorrenti]; String parametri=""; while(buff.ready()) { info=new StringTokenizer(buff.readLine(), " ;"); while(info.hasMoreTokens()) { parametri=info.nextToken(); //controllo la presenza dei vari parametri if(parametri.equals("-nick")) nick=info.nextToken(); else if(parametri.equals("-p")) p=(Integer.parseInt(info.nextToken())); else if(parametri.equals("-a")) a=(Integer.parseInt(info.nextToken())); else if(parametri.equals("-i")) i=info.nextToken(); else if(parametri.equals("-n")) n=(Integer.parseInt(info.nextToken())); else if(parametri.equals("-u")) u=(Integer.parseInt(info.nextToken())); else if(parametri.equals("-dp")) dp=info.nextToken(); else if(parametri.equals("-bonus")) contrlbonus="-bonus"; else if(parametri.equals("-nome")) nome=info.nextToken()+" "+info.nextToken(); parametri=""; } Giocatori giocatore=new Giocatori.Builder(nick, p).nome(nome).a(a).i(i).n(n).u(u).dp(dp).bonus(contrlbonus).build(); //l'oggetto sarą costruito "PER ESEMPIO" cosģ: (GDEANGELIS, 9994), punteggio ottenuto il 28/7/2010 giocatori[count++]=giocatore; } Giocatori [] classifica =new Giocatori[100]; int max; int index; int position=0; int elementi=0; int controllo=0; String valore=""; String oggetto; while(elementi<100) { index=0; max=0; for(int j=0; j<giocatori.length; j++) { valore=""; controllo=0; if(giocatori[j]!=null){ oggetto=giocatori[j].toString(); while(oggetto.charAt(controllo)!=' ') //(GDEANGELIS, 9994)// arrivo allo spazio dopo la virgola controllo++; controllo++; while(oggetto.charAt(controllo)!=')') //finchč non arrivņ alla parentesi di 9994) { valore+=oggetto.charAt(controllo); //memorizzo il punteggio controllo++; } if(Integer.parseInt(valore)>max) { max=Integer.parseInt(valore); //cerco il massimo index=j; //mi serve per la posizioe } } } elementi++; classifica[position++]=giocatori[index]; //inserisco nell'array ordinatamente nelle posizioni i giocatori elementi++; if(index==0) //in questa sezione dovrei eliminare l'elemento (giocatore) che gią ho inserito { for(int j=1; j<giocatori.length; j++) giocatori[j-1]=giocatori[j]; giocatori[giocatori.length-1]=null; } else if(index==giocatori.length-1) giocatori[index]=null; else { for(int j=index; j<giocatori.length-2; j++) giocatori[j]=giocatori[j+1]; giocatori[giocatori.length-1]=null; } } position=1; for(int j=0; j<100; j++) { out.write("["+position+"] "+classifica[j].toString()+'\r'+'\n'); position++; } long end=System.currentTimeMillis(); System.out.println("TEMPO TRASCORSO "+(end-start)); for(int k=0; k<giocatori.length; k++) System.out.println(giocatori[k].toString()); } catch(IOException e) { System.out.println("ERROR"); } } }

Rispondi quotando