【问题标题】:how to bubble sort through a text file in java如何在java中对文本文件进行冒泡排序
【发布时间】:2011-04-22 03:02:41
【问题描述】:

如何通过将值分配给数组来正确地对文本文件进行冒泡排序。 在下面的代码中,我尝试将文本文件中的值分配给字符串,同时还有一些东西要获取。然后我使用了一个 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

【问题讨论】:

  • 你能提供更多关于输入文件结构的信息吗? 1 行一个[玩家分数]?
  • 另外,在 split() 之后打印出 sv[] 数组,看看里面有什么。
  • 从您的代码看来,文本文件必须有每个玩家一行和一个分数? “ ”?澄清会有所帮助
  • @tony ennis:尝试打印sv,它存储了文本文件中的所有数据
  • homework 标签?这是我能想到用 Java 编写冒泡排序的唯一原因。否则你可以使用Collections.sort()

标签: java arrays text-files bufferedreader


【解决方案1】:

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

 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 而不是数组。

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

【讨论】:

    【解决方案2】:
    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) { }

    (修改冒泡排序以获取列表输入)

    【讨论】:

    • 如果您不想更改bubble_srt签名,也可以使用List.toArray。
    猜你喜欢
    • 2011-04-24
    • 2022-01-19
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 2011-06-05
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多