gpt4 book ai didi

java - 尝试对 .txt 文件中的 double 进行排序时遇到问题

转载 作者:行者123 更新时间:2023-12-01 11:42:22 26 4
gpt4 key购买 nike

尝试从我的 .txt 文件中按降序对 double 进行排序并打印出结果,但为什么我得到 4 行 []?

我的文本文件如下所示:

Mary Me,100.0
Hugh More,50.8
Jay Zee,85.0
Adam Cop,94.5
我的代码如下所示:

	public static void sortGrade() throws IOException
{
Scanner input = new Scanner(new File("Grades.txt"));

while(input.hasNextLine())
{
String line = input.nextLine();

ArrayList<Double> grades = new ArrayList<Double>();

Scanner scan = new Scanner(line);
scan.useDelimiter(",");
while(scan.hasNextDouble())
{
grades.add(scan.nextDouble());
}
scan.close();
Collections.sort (grades,Collections.reverseOrder());
System.out.println(grades);
}
input.close();
}

我希望输出如下所示:

Hugh More,50.8
Jay Zee,85.0
Adam Cop,94.5
Mary Me,100.0

朝着正确的方向插入会很棒,谢谢。

最佳答案

问题是您没有正确读取您的值!

您正在此处阅读您的行:

String line = input.nextLine();

然后尝试用第二个解析它,但是这个:

scan.hasNextDouble()

总会返回false因为每个字符串中的第一个标记是名称!而且它不是双倍的。您需要更改解析输入的方式。

此外,如果您想同时对名称和分数进行排序,您必须创建一个对象来封装 namegrade并实现Comparable或编写自定义 Comparator对于那种类型。否则你就必须做一个 Map映射grade对于每个名称,对成绩进行排序,然后按顺序打印,同时获取每个成绩的名称(同一成绩可以有多个名称)。不推荐这样做,因为它看起来确实很笨拙。

编写一个类似的类实际上并不难,您只需要实现一个方法:-)

@Edit:您不需要第二个扫描仪,如果您的格式已设置并且那么简单,只需使用 split在那line像这样:

String[] gradeName = line.split(",");
grades.add(Double.parseDouble(gradeName[1]));

如果你每人可以有超过 1 的成绩,而不是仅仅获得 gradeName[1]迭代gradeName从索引 1 处的元素开始(因为 0 是名称)。

@编辑2:

您正在创建一个新的 grades list 每次都会循环,因此它会读取一个条目,将其添加到列表中,对其进行排序并打印。您应该取出除 while 循环之外的那些行之外的所有内容:

String line = input.nextLine();
String[] gradeName = line.split(",");
grades.add(Double.parseDouble(gradeName[1]));

@Edit3:

如果您想要升序,请不要使用 Collections.reverseOrder() ,只是默认的:

Collections.sort (grades);

关于java - 尝试对 .txt 文件中的 double 进行排序时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29425090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com