如何通过将值分配给数组来正确地对文本文件进行排序。 在下面的代码中,我尝试将文本文件中的值分配给字符串,同时仍然需要提取。然后我使用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
答案 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)
bubble_srt()
调用。您正在替换每次迭代的全部内容,就像之前的答案正确指出的那样。您只想在读取整个文件内容后进行排序。由于您的文件可以是任何大小,因此除非您要执行两次读取以获取计数然后读入数组,否则无法预先初始化阵列。你最好使用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) {
}
(修改冒泡排序以获取列表输入)