我正在尝试制作一个处理“大”文本文件的程序。该文本文件显示 1000 行,每行对应一名教职员工。每行包含名字、姓氏、军衔和薪水。
文本文件链接: http://cs.armstrong.edu/liang/data/Salary.txt
程序应按级别统计员工数量,以及每组的总工资。最后,应显示每个组的总工资以及给定级别的员工的平均工资。我还没有完成整个程序,目前我正在确保文本文件被正确读取。
代码示例如下:
package ch12;
import java.util.Scanner;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
public class Chapter_12_E25_ProcessLargeDataSet {
public static void main(String[] args) throws IOException {
int assistantCount = 0;
int associateCount = 0;
int fullCount = 0;
int facultyCount = 0;
double assistantSalary = 0;
double associateSalary = 0;
double fullSalary = 0;
double facultySalary = 0;
try {
URL url = new URL("http://cs.armstrong.edu/liang/data/Salary.txt");
Scanner input = new Scanner(url.openStream());
while (input.hasNext()) {
String firstName = input.next();
String lastName = input.next();
String rank = input.next();
double salary = input.nextDouble();
if (rank.contains("assistant")) {
assistantCount++;
System.out.println("Rank is " + rank + " and salary is " + salary);
} else if (rank.contains("associate")) {
associateCount++;
System.out.println("Rank is " + rank + " and salary is " + salary);
} else {
fullCount++;
System.out.println("Rank is " + rank + " and salary is " + salary);
}
}
input.close();
}
catch (MalformedURLException ex) {
ex.printStackTrace();
System.exit(1);
}
catch (FileNotFoundException ex) {
ex.printStackTrace();
System.exit(2);
}
}
}
线路double salary = input.nextDouble()
导致InputMismatchException
。如果我将可变工资更改为 String
而不是double
,工资读取正确。如果我改变double salary = input.nextDouble()
进入double salary = Double.parseDouble(input.next())
,我猜对了double
值(value)。使用这种方法并不困扰我,但我只是好奇为什么 scanner
不接受 double
的工资值。
谁能解释一下为什么吗?
另外,还有一个偏离主题的子问题。如果我更改 URL object
参数中的文件名 Salary.txt到一个不存在的文件,FileNotFoundException
在catch statement
nr2 不会被抛出,而是抛出 InputMismatchException
被抛出。为什么是InputMismatchException
抛出而不是 FileNotFoundException
?
最佳答案
您的扫描仪很可能使用了错误的区域设置。根据 Salary.txt 的值,您只需将扫描仪的区域设置更改为英语即可。试试这个:
import java.util.Locale;
...
Scanner input = new Scanner(url.openStream());
input.useLocale(Locale.ENGLISH);
关于java - 尝试从文本文件读取 double 值,但引发了 InputMismatchException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37701607/