试图从文件中读取平均值 - java

时间:2015-06-24 10:06:13

标签: java arrays loops

我目前正在重新处理我在年初设置的任务,有一件事我真的没有理解循环和读/写文件的概念。手头的任务是从文本文件中读取一堆工资,将它们相加并计算平均值,然后在控制台中打印出结果。

到目前为止,我有这个:

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

4 个答案:

答案 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;);

     

扫描仪扫描=新扫描仪(文件);