我目前正在重新处理我在年初设置的任务,有一件事我真的没有理解循环和读/写文件的概念。手头的任务是从文本文件中读取一堆工资,将它们相加并计算平均值,然后在控制台中打印出结果。
到目前为止,我有这个:
import java.util.*;
import java.io.*;
public class loopingSalaryTotal {
public static void main (String[] args) throws IOException {
int [] salaries = new int[100];
Scanner scan = new Scanner("salaries1.txt");
int index = 0;
while (scan.hasNext()) {
salaries[index]=(scan.nextInt());
index++;
}
for (int i = 0; i < index; i++) {
System.out.println(salaries[i]);
}
scan.close();
}
}
它正在抛出此错误消息:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at loopingSalaryTotal.main(loopingSalaryTotal.java:18)
另外,我完全理解我实际上无法将数字加起来然后计算平均值,但是如果有人能够朝着正确的方向推动我,那将会非常感激。
以下是input.txt
的一些示例输入:
17283
12312
12312
12314
43242
64363
12364
74534
答案 0 :(得分:1)
如果你只想要平均值,那么你就不需要存储每一份工资。相反,在计算结束时的平均值之前保持一个运行总计:
primary[2].priority = -1
您的问题还在于您应该使用Scanner.hasNextInt
。这是因为import java.util.*;
import java.io.*;
public class loopingSalaryTotal {
public static void main(String[] args) throws IOException {
Scanner scan = new Scanner(new File("salaries1.txt"));
int items = 0;
double total = 0;
while (scan.hasNextInt()) {
// add the next salary to the total
total += scan.nextInt();
// increase the number of encountered salaries by 1
items++;
}
double average = total/items;
System.out.println("average:" + average);
scan.close();
}
}
可能会返回Scanner.hasNext
,即使文件中没有更多整数也是如此。例如,如果您的文件是
true
达到199后,125
172
199
zalgo_calls_your_name
将返回true。但是,199之后没有整数 - 只是一个字符串。因此,当您在循环中调用Scanner.hasNext
时,会抛出异常,因为找不到int。
答案 1 :(得分:0)
您的输入文件可能包含扫描仪错误的空格。 你应该在while循环中添加一个try catch块:
while (scan.hasNext()){
try{
salaries[index]=(scan.nextInt());
} catch(InputMismatchException e){
salaries[index]=-1; //Or some kind of identifier that something went wrong
}
index++;
}
答案 2 :(得分:0)
可能存在空白。将行读为String,修剪它,然后解析为Int。
答案 3 :(得分:0)
你做错了......
扫描仪扫描=新扫描仪(&#34; salaries1.txt&#34;);
上面的构造函数构造一个新的Scanner,它生成从指定字符串扫描的值,并且您正在读取文件而不是字符串。
你应该做的是
文件文件=新文件(&#34; salaries1.txt&#34;);
扫描仪扫描=新扫描仪(文件);