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 添加一个新条目。两个数组的大小必须等于文本文件中的行数,因此您可能希望使用某种形式的 List 而不是数组。

对于存储阵列(或列表)都添加一次名称和一次分数,我认为这将使您顺利完成您正在尝试做的事情。

于 2010-10-07T00:39:17.047 回答
1
  1. 将 for 循环和bubble_srt()调用移到 while 循环之外。您正在替换每次迭代的全部内容,就像前面的答案正确指出的那样。您只想在读取整个文件内容后进行排序。
  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 回答