0

値を配列に代入して、テキスト ファイルを適切にバブル ソートするにはどうすればよいですか。以下のコードでは、テキスト ファイルの値を文字列に代入しようとしましたが、取得するものがまだあります。次に、for ループを使用して、取得したものを配列に割り当てました。次に、バブルソートを使用して、フェッチした数値を最高から最低に並べ替えることを試みました。しかし、私はこれを出力として取得します:

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  

これが私のコードです:

     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){}

助けてください、

更新: 誰かがファイル構造について尋ねました。あなたはこれを参照していますか: これは file.txt です。私が取得しているのは一番右の数字です:

1 a 5
2 b 10
5 x 4
7 h 20
4

2 に答える 2

2

私はあなたの主な問題はループにあると思います:

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

あなたが一列に読むたびに。* player_name *配列の内容全体をsplayer_nameに置き換え、*player_score*の内容全体をs_player_scoreのint値に置き換えます。

あなたがやろうとしているのは、player_nameとplayer-scoreに1つの新しいエントリを追加することだと思います。2つの配列のサイズは、テキストファイルの行数と同じである必要があるため、配列ではなく、何らかの形式のリストを使用することをお勧めします。

両方のストレージアレイ(またはリスト)について、名前を1回、スコアを1回追加すると、実行しようとしていることへの道のりがうまくいくと思います。

于 2010-10-07T00:39:17.047 に答える
1
  1. for ループとbubble_srt()呼び出しを while ループの外に移動します。以前の回答が正しく指摘したように、各反復でコンテンツ全体を置き換えています。ファイルの内容全体が読み取られた後にのみソートしたい。
  2. ファイルは任意のサイズになる可能性があるため、カウントを取得してから配列に読み込むために 2 つの読み取りを実行する場合を除き、事前に配列を初期化する方法はありません。リストを使用する方がよいでしょう。スケルトンコードは次のとおりです。

    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) { }

(リスト入力を取得するようにバブル ソートを変更します)

于 2010-10-07T03:15:16.490 に答える