public static void main(String[] args) throws FileNotFoundException
{
Scanner inputFile = new Scanner("Employees.txt");
inputFile.useDelimiter(",");
String[] strLastName = new String[10];
String[] strFirstName = new String[10];
double[] dHours = new double[10];
double[] dPayRate = new double[10];
int x = 0;
while(inputFile.hasNext())
{
strLastName[x] = inputFile.next();
strFirstName[x] = inputFile.next();
dHours[x] = Double.parseDouble(inputFile.next());
dPayRate[x] = Double.parseDouble(inputFile.next());
x++;
}
inputFile.close();
String[] strFullName = FullName(strFirstName, strLastName);
double[] dGrossPay = GrossPay(dHours, dPayRate);
Output(strFullName, dHours, dPayRate, dGrossPay);
}
此代码在strLastName[x] = inputFile.next();
处停止,我不确定为什么。它以找到的java.util.NoSuchElementException
出现。
答案 0 :(得分:1)
您的问题是,您每次检查next()
时,都会四次致电hasNext()
。如果您的输入像这样在同一行:
First Last hours rate
然后,您应将inputFile.hasNext()
替换为inputFile.hasNextLine()
。
如果它们都位于不同的行上,例如:
First
Last
hours
rate
然后,您需要在所有inputFile.next()
之前(第一个之后)放置if语句。像这样:
while(inputFile.hasNext())
{
strLastName[x] = inputFile.next();
if (inputFile.hasNext()) {
strFirstName[x] = inputFile.next();
}
if (inputFile.hasNext()) {
dHours[x] = Double.parseDouble(inputFile.next());
}
if (inputFile.hasNext()) {
dPayRate[x] = Double.parseDouble(inputFile.next());
}
x++;
}
编辑:同样,下面的注释器是正确的,您正在以字符串而不是文件的形式调用扫描程序。您需要在开始时添加以下内容:
File myFile = new File("Employees.txt");
Scanner inputFile = new Scanner(myFile);
答案 1 :(得分:0)
您指定了useDelimiter(",")
,但这真的是所有值的分隔符吗?
我的猜测不是,因为Employees.txt
可能是CSV(逗号分隔值)文件,例如像这样:
Doe,John,40,15.00
Smith,Jane,35,12.00
以逗号分隔时,将获得以下值:
Doe
John
40
15.00\nSmith
Jane
35
12.00
如您所见,行尾并没有导致15.00
和Smith
是两个令牌。
解决方案:
使用CSV解析器 (强烈建议)
指定正确的定界符(不建议,也容易出错)
inputFile.useDelimiter(",|\\R");
使用行读取并拆分行:
String[] strLastName = new String[10];
String[] strFirstName = new String[10];
double[] dHours = new double[10];
double[] dPayRate = new double[10];
try (BufferedReader inputFile = Files.newBufferedReader(Paths.get("Employees.txt"))) {
String line;
for (int x = 0; (line = inputFile.readLine()) != null; x++) {
String[] values = line.split(",");
if (values.length != 4)
throw new IOException("Bad data: " + line);
strLastName[x] = values[0];
strFirstName[x] = values[1];
dHours[x] = Double.parseDouble(values[2]);
dPayRate[x] = Double.parseDouble(values[3]);
}
}