Domanda

Come faccio correttamente bolla ordinare attraverso un file di testo assegnando i valori a un array. Nel codice qui sotto ho cercato di assegnare i valori dal file di testo in una stringa mentre c'è ancora qualcosa da recuperare. Poi ho utilizzato un ciclo for per assegnare quello che ho prendere alla matrice. Poi ha cercato di utilizzare il bubble sort si spera di ordinare i numeri che ho di richiamo da alto al più basso. Ma ottengo questo uno come uscita:

5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  
10  10  10  10  10  10  10  10  10  10  10  10  10  10  10  10  10  10  10  10  
4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  
20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  
100  100  100  100  100  100  100  100  100  100  100  100  100  100  100  100  100  100  100  100  
0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  
0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  
0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  
78  78  78  78  78  78  78  78  78  78  78  78  78  78  78  78  78  78  78  78  
12  12  12  12  12  12  12  12  12  12  12  12  12  12  12  12  12  12  12  12  
29  29  29  29  29  29  29  29  29  29  29  29  29  29  29  29  29  29  29  29  

Ecco il mio codice:

     try{
 int i;
 String ss;
   FileReader fr;
      fr = new FileReader (new File("X:\\file.txt"));
      BufferedReader br = new BufferedReader (fr);


while ((ss = br.readLine()) != null) {
    String[] sv = ss.split(" ");


        String splayer_name=sv[1];
        String s_player_score=sv[2];

 for(int xy=0;xy<player_name.length;xy++){
        player_name[xy]=splayer_name;
        player_score[xy]=Integer.parseInt(s_player_score);
}


bubble_srt(player_score, player_score.length);

    for(i = 0; i <player_score.length; i++)
      System.out.print(player_score[i]+"  ");
    System.out.println();




  }

  }catch(Exception e){}

Si prega di aiuto,

Aggiornamento: qualcuno ha chiesto circa la struttura del file, ti riferisci a questo: Questo è il file.txt, quello che sto recupero è il numero più a destra:

1 a 5
2 b 10
5 x 4
7 h 20
È stato utile?

Soluzione

  1. Spostare il ciclo for e la chiamata bubble_srt() al di fuori del ciclo while. Si sta sostituendo l'intero contenuto su ogni iterazione come quello che il precedente risposta ha giustamente rilevato. Si desidera solo in ordine l'intero contenuto del file vengono letti.
  2. Dal momento che il file può essere di qualsiasi dimensione non c'è modo per inizializzare l'array in anticipo a meno che non si desidera eseguire due letture uno per ottenere il conteggio e poi di leggere nella matrice. Si sarebbe meglio utilizzare una lista. Ecco un codice di scheletro:

    try {
        int i;
        String ss;
        FileReader fr;
        fr = new FileReader(new File("file.txt"));
        BufferedReader br = new BufferedReader(fr);
        int xy=0;
        List<String> player_name = new ArrayList<String>();
        List<Integer> player_score = new ArrayList<Integer>();
    
    
    
    while ((ss = br.readLine()) != null) {
        String[] sv = ss.split(" ");
    
    
            player_name.add(sv[1]);
            player_score.add(Integer.parseInt(sv[2]));
    
    
    }
    
    
    bubble_srt(player_score);
    
    } catch (Exception e) { }

(Modifica la bubble sort di prendere un ingresso lista)

Altri suggerimenti

Credo che il problema principale è con il ciclo:

 for(int xy=0;xy<player_name.length;xy++){
        player_name[xy]=splayer_name;
        player_score[xy]=Integer.parseInt(s_player_score);
}

Ogni volta che si legge in una linea. Si sostituisce l'intero contenuto del Nome_giocatore * * array con lo splayer_name, ei l'intero contenuto del player_score * * con il valore int di s_player_score.

sto indovinando che quello che si sta cercando di fare è aggiungere una sola nuova voce alla PLAYER_NAME e lettore-score. La dimensione dei due array deve essere uguale al numero di righe nel file di testo, in modo che si potrebbe desiderare di utilizzare una qualche forma di elenco invece di un array.

Per entrambi gli array di storage (o liste) aggiungere il nome di una volta e il punteggio di una volta e penso che ti porterà sulla buona strada per ciò che si sta cercando di fare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top