3

ディスカッションフォーラムを前後に読んで、これに1日苦労してきましたが、結果はありません。関数aMenu()の2番目の呼び出しがゼロを返し、代わりに新しいユーザー入力を待たない理由を誰でも教えてくれますか?hasNextInt()、nextLine()など、さまざまなことを試しましたが、何も機能しませんでした。ユーザーが何かを書くまで、hasNextInt()をブロックするべきではありませんか?どうすればこれを解決できますか?ありがとう。

package FirstJavaPackage;
import java.util.Scanner;

public class testScanner
{
    public static void main(String[] args)
    {
        int choice = aMenu();
        System.out.println("You typed: "+choice);
        choice = aMenu();
        System.out.println("You typed: "+choice);
    }

    public static int aMenu()
    {
        int result = 0;
        System.out.println("In aMenu... enter an int: ");
        Scanner keyboard = new Scanner(System.in);
        if (keyboard.hasNextInt())
            result = keyboard.nextInt();
        keyboard.close();
        return result;
    }
}

出力は次のとおりです。

aMenuに...intを入力します:2入力しました:2 aMenuに...入力しますint:入力しました:0

4

3 に答える 3

1

Scanner次の呼び出し全体で同じオブジェクトを再利用する必要がありますaMenu()

public static void main(String[] args)
{
    Scanner keyboard = new Scanner(System.in);
    int choice = aMenu(keyboard);
    System.out.println("You typed: "+choice);
    choice = aMenu(keyboard);
    System.out.println("You typed: "+choice);
}

public static int aMenu(Scanner keyboard)
{
    int result = 0;
    System.out.println("In aMenu... enter an int: ");
    result = keyboard.nextInt();
    return result;
}

詳細については、System.inで複数のScannerオブジェクトを使用する方法を参照してください。

于 2013-03-07T09:10:40.543 に答える
0

最初の呼び出しの後、実際にSystem.in入力ストリームを閉じます。

Scanner.close()ドキュメントから:

When a Scanner is closed, it will close its input source if the source 
implements the Closeable interface.

close最後にスキャナーを使用しないようにしてくださいaMenu:メソッドの外部でスキャナーを初期化し、aMenuメソッドにそれを使用させます。

于 2013-03-07T09:14:06.897 に答える
0

入力ソース全体が閉じられるためscanner.close、スキャナーをaMenuメソッドに渡し、次のようにする必要があります。

import java.util.Scanner;

public class TestScanner
{
   public static void main(String[] args)
   {
      Scanner keyboard = new Scanner(System.in);
      int choice = 0;

      do
      {
         choice = aMenu(keyboard);
         System.out.println("You typed: " + choice);
      } while (choice > 0);

      keyboard.close();
    }

    public static int aMenu(Scanner keyboard)
    {
        int result = 0;
        System.out.println("In aMenu... enter an int: ");

        if (keyboard.hasNextInt())
           result = keyboard.nextInt();

        return result;
    }
}
于 2013-03-07T09:22:57.380 に答える