尝试从文件中读取数据以计算平均值 - Java

3

我目前正在重新处理今年初设定的任务,有一件事情我真的没有掌握概念,那就是循环和读/写文件。手边的任务是从文本文件中读取一堆薪水,将它们加起来并计算平均值,然后在控制台中打印出结果。

到目前为止,我有这个:

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个回答

1
如果您只需要平均工资,那么无需存储每个工资。相反,在最后计算平均数之前保持累加总和即可:
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.hasNextInt。这是因为Scanner.hasNext可能会返回true,即使文件中没有更多整数。例如,如果你的文件是
125
172
199
zalgo_calls_your_name

当到达199时,Scanner.hasNext将返回true。然而,199后面没有整数——只有一个字符串。因此,在循环中调用Scanner.nextInt会抛出异常,因为找不到任何int。


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++;
}

0

可能存在空格的情况。将行读取为字符串,去除空格,然后解析为整数。


0

你做错了...

Scanner scan = new Scanner("salaries1.txt");

上面的构造函数构造了一个新的Scanner,从指定的字符串中扫描值,而你正在读取文件而不是字符串。

你应该这样做:

File file = new File("salaries1.txt");

Scanner scan = new Scanner(file);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接