如何显示输出?

时间:2013-11-13 00:16:33

标签: java

我使用的是具有名字和姓氏以及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.");
        }

2 个答案:

答案 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() );
    }

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