我使用的是具有名字和姓氏以及4个销售号码的文件。我创建了一个数组。我想使用所有人和销售数字来显示。 这是文件的格式。
Willow Mary
154 189.5 95 76 63.51
这就是我的尝试。它继续我的捕获块。
import java.io.File;
import java.util.Scanner;
public class Assignment10 {
public static final int NUM_SALESPEOPLE = 20;
public static void main(String[] args) {
SalesPerson[] list = new SalesPerson[NUM_SALESPEOPLE];
try {
int people = 0;
Scanner fileInput = new Scanner(new File("A10.txt"));
while (fileInput.hasNext()) {
String firstName = fileInput.nextLine();
String lastName = fileInput.nextLine();
double firstSales = fileInput.nextDouble();
double secondSales = fileInput.nextDouble();
double thirdSales = fileInput.nextDouble();
double fourthSales = fileInput.nextDouble();
SalesPerson person = new SalesPerson(firstName, lastName,
firstSales, secondSales, thirdSales, fourthSales);
list[people] = person;
people++;
}
} catch (Exception ex) {
System.out.println("Error opening file.");
}
答案 0 :(得分:2)
如果您的文件是您所说的格式,那么当您阅读每个人时,您正在阅读太多行。这段代码:
String firstName = fileInput.nextLine();
String lastName = fileInput.nextLine();
从文件中读取两行,但名称显示在一行中。当你进入文件末尾的三行之内或者(更有可能)尝试解析包含名称的行时,你可能会用尽行,就好像它是双值一样。
阅读双打后,您还需要使用任何尾随空格(包括换行符)。试试fileInput.skip("\\w");
。
相反,将整行双打作为单行读取,并使用代码(例如,使用split(" ")
)或通过其他方式解析来将其分开。
答案 1 :(得分:0)
此代码
String firstName = fileInput.nextLine();
String lastName = fileInput.nextLine();
吃了2行,所以下面的nextDouble()调用不会去你想去的地方。
另外
} catch (Exception ex) {
System.out.println("Error opening file.");
}
并非总是如此,因为您捕获的所有Exception
不仅仅是文件相关的。至少还会输出您的异常生成的消息:
} catch (Exception ex) {
System.out.println("Something went wrong: " + ex.getMessage() );
}
更好的是,分别捕获程序中生成的各种异常,并提供合理的错误消息或每种异常类型的恢复行为。