1

プログラムの実行中にエラーが発生しました。

プログラムを実行し、入力ファイルにデータを入力しました。

入力ファイルの内容

LIMIT
2
ADD 30 60
MUL -60 60

次のような例外エラーが発生しました。

Exception in thread "main" java.util.NoSuchElementException
        at java.util.Scanner.throwFor(Scanner.java:907)
        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 Test.doLimit(Test.java:41)
        at Test.checkResult(Test.java:24)
        at Test.main(Test.java:15)

私はグーグルで検索し、String input = sc.next();と信じていました。forループ内でエラーが発生しているはずです。このエラーを解決する方法を教えてください。

私のコードは以下のとおりです。

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String input = sc.nextLine();
    checkResult(input);
}


public static void checkResult(String input)
{
    if(input.equals("LIMIT"))
    {
        //do stuff
        doLimit();
    }
    else if(input.equals("SENT"))
    {
        //do stuff

    }
    else
    {
        //do stuff

    }
}
public static void doLimit()
{
    Scanner sc = new Scanner(System.in);
    int numOfInput = sc.nextInt();
    int x,y;
    for(int i = 0; i < numOfInput; i++)
    {
        String input = sc.next();
        x = sc.nextInt();
        y = sc.nextInt();

        if(input.equals("ADD"))
        {
            //add

        }
        else if(input.equals("SUB"))
        {
            //sub

        }
        else
        {
            //multiple

        }
    }
}
4

3 に答える 3

1

さらに入力があるかどうかを確認する必要があります。関連するスタック トレースを確認nextIntできます。SDK を見ると、この例外がスローされることがわかります。

入力が疲れています。

とにかくあなたの問題はここにあります:

int numOfInput = sc.nextInt();

そのため、尋ねる前に有効な入力があることを確認してください。

if (sc.hasNextInt()) {
  .
  .
  .
}
于 2013-01-23T12:34:57.600 に答える
0

スキャナーのデフォルトの区切り文字は空白です。ただし、最初の 2 行の入力として改行を区切り文字として使用し、次に空白と改行を最初に使用する予定です。多分それが問題です。空白で区切って、すべてを 1 行に書いてみてください。

于 2013-01-23T12:37:08.487 に答える
0

入力ファイルを介してデータを送信する場合はfileScanner()コンストラクターでそれを提供する必要があります。

あなたが現在行っていることは提供されていますSystem.in

編集 :

また、ファイルのスキャナーを一度だけ開いて、それをずっと使用する必要があります。この場合、

1) スキャナを開いて、最初の行を読み取っています。

2) 次に、doLimit 関数で、再度スキャナーを開き、整数ではない入力ファイルの最初の行を読み取ります。

したがって、エラー。

于 2013-01-23T12:35:07.680 に答える