繁体   English   中英

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

[英]how to bubble sort through a text file in java

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

我认为您的主要问题在于循环:

 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. 将for循环和bubble_srt()调用bubble_srt() while循环之外。 您将在每次迭代中替换全部内容,就像前面的答案正确指出的那样。 您只希望在读取整个文件内容之后进行排序。
  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); 
    \n\n } catch(Exception e){\n }\n

(修改您的气泡排序以接受列表输入)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM