gpt4 book ai didi

java - 尝试从文本文件读取 double 值,但引发了 InputMismatchException

转载 作者:行者123 更新时间:2023-12-02 03:33:47 25 4
gpt4 key购买 nike

我正在尝试制作一个处理“大”文本文件的程序。该文本文件显示 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到一个不存在的文件,FileNotFoundExceptioncatch 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com