0

我正在使用一个包含名字和姓氏以及四个销售编号的文件。我创建了一个数组。我想使用所有的人员和销售数据来显示。这是文件的格式。

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.");
        }
4

2 回答 2

2

如果您的文件是您所说的格式,那么当您阅读每个人时,您阅读的行数过多。这段代码:

String firstName = fileInput.nextLine();
String lastName = fileInput.nextLine();

从文件中读取两行,但名称出现在一行上。当您在文件末尾的三行内或其他(更有可能)尝试解析包含名称的行时,您可能会用完行,就好像它是双值一样。

阅读双打后,您还需要消耗任何尾随空格(包括换行符)。试试fileInput.skip("\\w");

相反,将整行双打作为单行读取,并用代码(例如,使用split(" "))或通过其他方式解析将其分开。

于 2013-11-13T00:21:41.550 回答
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() );
    }

更好的是,分别捕获程序中生成的各种异常,并提供合理的错误消息或每种异常类型的恢复行为。

于 2013-11-13T00:22:24.047 回答