在我的作业中,我必须将名称列表输出到有效的输出文件或错误文件。我现在需要做的是扫描文本文件以查找任何输入错误(例如,应该是int的内容中有一个字母,因此抛出异常)。
我的程序在检测这些错误并打印出有效信息时工作正常,但我的问题是输出无效信息。例如,当我的程序检测到无效的双输入时,它只打印部分行而不是整行。我正好处于亏损状态,我想知道你是否可以帮助我?
这是我的计划......
import java.io.*;
import java.util.*;
public class TaxDeductionDriver {
public static void main(String[] args) {
//array will be used to store information and output net income
Employee[] info = new Employee[71];
Scanner input = null;
PrintWriter output = null;
int i = 0;
try {
input = new Scanner(new FileInputStream("payroll.txt"));
output = new PrintWriter(new FileOutputStream("error.txt"));
while(input.hasNextLine()) {
try {
//assigns a column to each variable
int empNum = input.nextInt();
String fName = input.next();
String lName = input.next();
double avgHrs = input.nextDouble();
double hrWage = input.nextDouble();
//checks to see if wage is below minimum ($10.35)
if(hrWage < 10.35) {
throw new InputMismatchException();
}
//object used to output list of valid information and calculate tax deductions
//if one of parameters is null, input mismatch exception is thrown
info[i] = new Employee(empNum, fName, lName, avgHrs, hrWage);
i++;
}
catch (InputMismatchException e) {
//outputs invalid information to error file
output.println(input.nextLine());
continue;
}
}
output.close();
}
catch (FileNotFoundException e) {
System.out.println("Couldn't find file");
}
finally {
System.exit(0);
}
}
}
我的错误文件应该是这样的
> >Error lines found in file payroll
16783 JOHN CONNAUGHT 30.5 10.00
21O15 JAMES HAROLD 32.0 10.50
52726 MITCHELL HACKETT 23,7 12.05
#9331 MARIO TODARO 35.0 17.00
22310 CLAUDIA O’HARE 30.5 9.80
26734 EDITH ROOSEVELT 20.O 25.50
41024 EMILE BOURGEOYS 8.5 6.45
43018 JAMES WALKER 20.0 8.00
00812 VICTORIA PORTER 36.0 9.50
9201( DAVID BROCK 29.0 22.50
但是当我运行该程序时,它最终会像这样
*john connaught is missing here*
21O15 JAMES HAROLD 32.0 10.50
23,7 12.05
#9331 MARIO TODARO 35.0 17.00
20.O 25.50
9201( DAVID BROCK 29.0 22.50
我知道发生了什么,但是如何让PrintWriter输出整行而不是其中的一部分呢?
答案 0 :(得分:2)
每次拨打&#34; next&#34;扫描仪都会前进。方法,所以在你的catch块中,input.nextLine()将返回最后一行&#34; next&#34;打电话给下一行字符。
要解决此问题,您需要先读取整行,解析它,如果出现错误,请输出它。像这样:
String line = input.nextLine();
try {
String[] tokens = line.split("\\s+");
int empNum = Integer.parseInt(tokens[0]);
String fName = tokens[1];
String lName = tokens[2];
double avgHrs = Double.parseDouble(tokens[3]);
double hrWage = Double.parseDouble(tokens[4]);
//.......
}
catch (InputMismatchException e) {
output.println(line); //outputs invalid information to error file
}
答案 1 :(得分:1)
尝试更改此行:
output.println(input.nextLine());
到:
output.println(empNum +" fname" +" lname"+ avghrs + ""+ hrswage);