0

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

2 に答える 2

2

あなたのファイルがあなたが言うフォーマットである場合、一人一人を読むときにあまりにも多くの行を読んでいます. このコード:

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

はファイルから 2 行を読み取りますが、名前は 1 行に表示されます。ファイルの終わりから 3 行以内に到達した場合、または (より可能性が高い) 名前を含む行を double 値であるかのように解析しようとすると、おそらく行が不足しています。

double を読み取った後、末尾の空白 (改行を含む) も消費する必要があります。試してみてくださいfileInput.skip("\\w");

代わりに、double の行全体を 1 行として読み取り、コード (たとえば を使用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 に答える