如何在java中对文本文件进行冒泡排序

时间:2010-10-07 00:13:35

标签: java arrays text-files bufferedreader

如何通过将值分配给数组来正确地对文本文件进行排序。 在下面的代码中,我尝试将文本文件中的值分配给字符串,同时仍然需要提取。然后我使用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

2 个答案:

答案 0 :(得分:2)

我认为你的主要问题是循环:

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

每次你读一行。您正在使用splayer_name替换* player_name *数组的全部内容,并使用s_player_score的int值替换* player_score *的全部内容。

我猜你要做的是为player_name和player-score添加一个新条目。两个数组的大小必须等于文本文件中的行数,因此您可能希望使用某种形式的List而不是数组。

对于两个存储阵列(或列表),只需添加一次名称和一次得分,我认为这样可以帮助您顺利完成您想要做的事情。

答案 1 :(得分:1)

  1. 移动for循环&amp; while循环外的bubble_srt()调用。您正在替换每次迭代的全部内容,就像之前的答案正确指出的那样。您只想在读取整个文件内容后进行排序。
  2. 由于您的文件可以是任何大小,因此除非您要执行两次读取以获取计数然后读入数组,否则无法预先初始化阵列。你最好使用List。这是一个框架代码:

    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) { }
  3. (修改冒泡排序以获取列表输入)