提问人:ouryuken 提问时间:7/30/2023 最后编辑:Diego Borbaouryuken 更新时间:7/31/2023 访问量:43
扫描文本文件时计算最大值时出错
Error calculating the max while scanning a text file
问:
我最近刚开始学习 Java,我正在做一个练习。
我正在尝试读取文本文件并显示最大值、最小值和平均值。到目前为止,我能够输出平均值,但在尝试查找最大值时遇到了问题。我计划将我的最小值作为我的 max+1,但我似乎对最大值有问题。代码在下面,错误输出在下面。谁能告诉我我哪里做错了?
谢谢!
import java.io.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String fileName = "scratch.txt";
Scanner inputStream = null;
try {
inputStream = new Scanner(new File(fileName));
} catch (FileNotFoundException exception) {
System.out.println("The file: " + fileName + " has not been found, exiting program.");
System.exit(0);
}
int sum = 0;
int i = 0;
int max = 0;
int min = 0;
while (inputStream.hasNextInt()) {
if (inputStream.nextInt() > max) {
max = inputStream.nextInt();
}
sum = +inputStream.nextInt();
i++;
}
System.out.println(max);
System.out.println("The integer average is: " + sum / i);
inputStream.close();
}
}
错误输出:
Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.Scanner.throwFor(Scanner.java:945)
at java.base/java.util.Scanner.next(Scanner.java:1602)
at java.base/java.util.Scanner.nextInt(Scanner.java:2267)
at java.base/java.util.Scanner.nextInt(Scanner.java:2221)
at Main.main(Main.java:27)
答:
0赞
rzwitserloot
7/30/2023
#1
每次调用都消耗一个令牌。您在单个循环中调用它多达 3 次(如果“下一个数字”高于最大值,则获取 THAT 之后的数字并将其存储在 中,然后获取之后的数字(因此,总共 3 个数字)并将其相加。如果第一个数字不高,则只需获取第二个数字并将其相加。.nextInt()
max
您只想在该循环中调用一次。将结果分配给变量,然后对该变量执行 and add 操作。.nextInt()
while
if
0赞
g00se
7/30/2023
#2
您现在已经整理好了关于 的评论,但您可能想知道,通过使用流媒体,您可以更轻松地使用 ,以及收集您的统计数据。也许以后在你的研究中要检查一些东西:nextInt
Scanner
import java.util.Scanner;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.IntSummaryStatistics;
public class Stats {
public static void main(String[] args) throws Exception {
try (Scanner s = new Scanner(Files.newBufferedReader(Path.of("scratch.txt")))) {
IntSummaryStatistics ss = s.tokens().
mapToInt(Integer::valueOf).
summaryStatistics();
System.out.println(ss);
}
}
}
评论
nextInt
while
inputStream.hasNextInt()
true
inputStream.nextInt()
inputStream.nextIntt()
while
nextInt()