2017-11-03 4 views
-2

私はユーザーに2つの数字を尋ねます。私はそれらの入力が実際に数値であるかどうかをチェックしたいが、最初の入力が文字列であれば、これまでのコードでは2番目の値を入力できません。スキャナはelse文で入力を読み取っていません

したがって、スキャナはelse文を読み取ることはありません。

どうすればいいですか?

import java.util.Scanner; 

public class calculations { 
    public static void main(String[] args) { 
     Scanner console = new Scanner(System.in); 
     System.out.print("Please enter your first name: "); 
     String fname = console.nextLine(); 
     System.out.print("Please enter your last name: "); 
     String lname = console.nextLine(); 
     System.out.print("Please enter your first number: "); 
     if (console.hasNextInt()) { 
      int number1 = console.nextInt(); 
      System.out.print("Please enter your second number: "); 
      if (console.hasNextInt()) { 
       int number2 = console.nextInt(); 
      } 
     } else 
      System.out.print("Please enter your second number: "); 
     if (console.hasNextInt()) { 
      int number2 = console.nextInt(); 
      // this part does not work 
     } 
    } 
} 
+2

あなたの 'else'ブロックにはprintステートメントだけが含まれています。 –

+1

前のコメントに加えて、{else}条件を '{}'ブロックに入れることは助けになります。 – Eugene

+0

私はすでにそれを試みました。残念ながらそれは助けにはならない。他のアイデア? – kiaora

答えて

1

あなたは(それが文字列の場合)Scanner.hasNextIntメソッドは以前の入力を過ぎてカーソルを移動しませんので、ごelse文の後console.nextLine();を追加する必要があります。

+1

OPはnextInt()を呼び出すことはありません。あなたが指摘している問題は、それに関するものではありません。 nextInt()はEOLを消費しないので、空の文字列を読み取るのはnextLine()です。 next()を呼び出すことはこの問題の解決策ではありませんが、ここではこの問題は発生しません。 –

+0

@JB Nizet、そうです、問題はEOLを消費することではありません。しかし、カーソルをnext()メソッドで動かすことは有効な解決策と思われるので、私はその答えを編集しました。それを指摘してくれてありがとう! – Eugene

+1

「最初の番号を入力してください:」の答えが「Hello world」で、next()を呼び出してカーソルを移動するとカーソルはどこにありますか?それはどこにあるべきですか? –

関連する問題