2017-12-21 22 views
-2
int selection; 
    while (true) { 
     selection = printing(); 
     if (selection == 4) { 

      id = starting(); 

      if (id < 1 || id > 10) { 
       if (id == -20150901) { 
        System.out.println("Exit code entered"); 
        break; 
       } 

       id = incorrectId(id); 
      } 
     } 


    } 


public static int printing(){ 
    Scanner sc = new Scanner(System.in); 
    System.out.print("Main menu\n1: check balance\n2: withdraw\n3: deposit\n4: exit\nEnter a choice: "); 
    System.out.print("Enter a choice: "); 
    int selection = sc.nextInt(); 
    return selection; 
} 

これは私のJavaコードの一部です。 3行目にNoElementExceptionが発生しました。 コード全体が必要な場合は、ここでコピーして貼り付け、その内容を説明します。 この例外はどのように解決できますか? ループが始まるたびにキーボード入力を取得したいと思います。NoElementException in java

ありがとうございます。

+0

_Which_3行目、上部、または 'main()'メソッド?あなたの質問を投稿する前に、この問題の助けを借りて、ここを突き刺しましたか? –

+0

'nextInt()'は仕様に従って、 "入力が使い果たされた場合" NoSuchElementExceptionをスローします。標準入力は空でなければなりません。あなたのプログラムの標準入力は何ですか? – bcsb1001

答えて

0

printing()を呼び出すたびに、コードでSystem.inをラップする新しいスキャナが作成されます。これは間違っています。その代わりに、アプリケーションはSystem.inをそのままラップしてScannerを作成し、どこかに保存し、System.inから読み取っているコールと他のすべての場所でそれを再利用する必要があります。

複数のScannerオブジェクトを作成する際の問題は、方法がhashNext*next*の場合、文字をスキャナのバッファに「先読み」する可能性があることです。したがって、最初のprinting()はすべての文字を「消費」する可能性があります。


これは実際の問題の原因ではありません。その他の原因としては次のようになります。

  • 標準入力を使用すると、コードのいくつかの他の部分にSystem.inを閉じる(直接的または間接的に)であってもよい空、または
  • である可能性があります。

しかし、私は識別の問題はバグがあることだろう原因アプリケーションの他の文脈での障害...そして、理解し、それを修正することをお勧めします。

+0

ありがとうございます。私はScanner sc = new Scanner(System.in)を入れようとしました。クラス宣言の直後に問題が発生しました。静的コンテキストからは参照できません。だから私は静的をデフォルトに変更した。次に、メインはメソッドを解決できませんでした..... –

+0

'static'とは何か、そして静的変数とインスタンス変数がどのように機能するかについての講義ノートを確認する必要があります。静的メソッドまたはインスタンスメソッドから静的変数*にアクセスできます。インスタンス変数は、あなたが*あなたが話しているインスタンスをコンパイラに伝える場合にのみ、インスタンスメソッドから参照することができます。 –