0

そのため、クラスのコードに取り組んでおり、何が問題なのかわかりません。コードがコンパイルされ、探しているファイルを入力すると、次のメッセージが表示されます。

Enter the name of the file: FanData.txt
Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:909)
    at java.util.Scanner.next(Scanner.java:1530)
    at java.util.Scanner.nextInt(Scanner.java:2160)
    at java.util.Scanner.nextInt(Scanner.java:2119)
    at FanDriver.fillArray(FanDriver.java:76)
    at FanDriver.main(FanDriver.java:35)

何かキーを押すと続行します 。. .

コンパイラとして TextPad を使用しており、テキスト ファイルはプロジェクト内にあります。以下は私が書いたコードです(引用符で呼び出されているメソッドは後で行う必要があるため無視してください):

 import java.io.*;
import java.util.Scanner;

public class FanDriver
{
    private static Scanner keyboard = new Scanner(System.in);

    public static void main(String args[]) throws IOException
    {
        // Constant for the amount of elements of the array
        final int MAXSIZE = 100;

        // Declaring variables
        int amountFans = 0;

        // Declaring and initializing our array of fans
        Fan[] fans = new Fan[MAXSIZE];

        // Calling all of our methods
        amountFans = fillArray(fans, MAXSIZE);
/**
        listFanData(fans, amountFans);
        bubbleSortByAge(fans, amountFans);
        listFanData(fans, amountFans);
        bubbleSortByFan(fans, amountFans);
        listFanData(fans, amountFans);
        searchByAge(fans, amountFans);
        searchByFan(fans, amountFans);
*/

    }

    public static int fillArray(Fan[] array, int MAXSIZE) throws IOException
    {
        // Declaring variables
        int counter = 0;
        int age;
        String name;

        // Getting the file name
        System.out.print("\nEnter the name of the file: ");
        String fileName = keyboard.nextLine();

        // Opening the file
        File file = new File(fileName);
        Scanner inputFile = new Scanner(file);

        // Making sure the file was successfully opened
        if (!file.exists())
        {
            System.out.println("\nERROR: FILE DOESN'T EXIST. CLOSING PROGRAM NOW.");

            // Exiting the program
            System.exit(0);
        }

        // Reading all of the amounts from the file
        while (inputFile.hasNext() && counter < MAXSIZE)
        {
            name = inputFile.nextLine();
            age = inputFile.nextInt();

            array[counter] = new Fan(name, age);

            // Adding to our counter
            counter = counter + 1;
        }

        //Closing file
        inputFile.close();

        return counter;
    }
}

Fan クラスのコードはなく、クラス自体だけです。取得するファイルは FanData.txt ファイルで、次のようになります。

クリス・P・クリーム 5 スコット・フリー 9 ルー・テナント 3 トリッシュ・フィッシュ 12 エラ・メントリー 4 ホリー・デイ 3 ロビン・デクレードル 12 アネット・ファニセロ 4 エルモ 7 グローバー 3 ビッグ・バード 9 バート 7 アーニー 3 グローバー 9

テキスト ファイルは行単位です。1 行が名前で、次が番号です。ここで正しくフォーマットする方法がわかりません。どんな助けでも大歓迎です。

4

3 に答える 3

0

入力ファイルの区切り文字がわかりません。

「スキャナー」を(明示的な区切り文字を指定せずに)インスタンス化した方法では、デフォルトの区切り文字、つまり空白文字を使用する必要があります。

あなたの場合の「nextLine()」メソッドは「行」を返していないようです。

むしろ、 Scanner が続くパターンと一致しない数値または文字列を返します(おそらく、ファイルを確認する必要があります)。

于 2014-04-23T05:04:05.230 に答える
0

エラーは型の不一致によるものです。最初の読み取り後、スキャナーは整数以外の値を指します。

する前にあなたの名前を印刷してみてください

age = inputFile.nextInt();

あなたは問題を知るようになります。

上記は間違いを理解するための手段です。

あなたの問題の解決策

試す :

age = Integer.parseInt(inputFile.nextLine()); // age の代わりに = inputFile.nextInt();

于 2014-04-23T03:56:16.590 に答える