2

私は Java を学ぼうとしていますが、Scannerクラスを使うのに苦労しています。私がやりたいのは、Scanner.nextInt()メソッドを使用して整数を受け入れることです。これに伴い、入力が数値かどうかを確認したい。そうでない場合は、ユーザーにもう一度入力してもらいたいと思います。

これを達成するために私が書いたコードは次のとおりです。

  do
  {
   System.out.print("Please enter Side 1:\t");

   if(scanner.hasNextInt())
   {
     d1=(double)scanner.nextInt();
     i=0;
   }
   else
   {
     System.out.print("Side shoud be a number!\t");
     i=1;
   }

  }
  while(i!=0);

残念ながら、これは無限ループに入ります。私が理解しているのは、2 番目のループで「リターン」を待たないということです。

4

5 に答える 5

0

スキャナーの次の行のメソッド呼び出しがないため、無限ループに陥ります。太字の行の追加を参照してください。

    do {
        System.out.print("Please enter Side 1:\t");

        if(scanner.hasNextInt()) {  
            double d1=(double)scanner.nextInt();
            i=0;
        }

        else {
            System.out.print("Side shoud be a number!\t");
            i=1;
        }

        **scanner.nextLine();**
           }
    while(i!=0);
于 2013-09-01T19:53:32.917 に答える
0

else 分岐で誤った入力を消費しないため、scanner.hasNextInt()返された場合false、次の反復で同じスキャナー状態が見られるため、無限ループに入ります。

于 2013-09-01T19:34:58.770 に答える
0

scanner.hasNextInt()true を返す場合は機能するはずですが、false を返すと無限ループに入ります。

これはどう:-

do
  {
   System.out.print("Please enter Side 1:\t");


  if(scanner.hasNextInt())
  {
   d1=(double)scanner.nextInt();
   i=0;

  }
   else
   {
   System.out.print("Side shoud be a number!\t");
   i=1;
   scanner.nextLine();
   }

  }
  while(i!=0);

または、while ループを次のように変更してみてください:-

 while(i==0);
于 2013-09-01T19:35:12.920 に答える
0

1 と 0 を交換するのは単純な間違いだと考える人もいれば、条件を反転する必要があると考える人もいますが、そうではありません。この変更を行った場合、既に番号を取得しているにもかかわらず、継続的に番号を求めるプロンプトが表示されます。

入力が整数でない場合にのみプロンプトを表示し続け、その整数を取得した瞬間にプロンプ​​トを停止しますよね?

何をしたいのかが明確になるように、try-catch と Parse メソッドの形式を使用することをお勧めします。

(また、整数 i は整数である必要はありません。ブール値 (true または false) でかまいません。これにより、変数の意図がより明確になります。変数に適切な名前を付けることは、優れたコードにとって重要です。)

これを参照してください:

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

class Test {                                                                        
  public static void main(String args[]) {                                          
    Scanner scanner = new Scanner(System.in);                                       
    boolean done = false;                                                           
    double d1 = 0;                                                                  
    do {                                                                            
      System.out.print("Please enter Side 1:\t");                                   
      String next = scanner.next();                                                 
      try {                                                                         
        d1 = Double.parseDouble(next);                                              
        done = true;                                                                
      } catch (Exception e) {                                                       
        System.out.print("Side should be a number!\t");                              
      }                                                                             
    }                                                                               
    while(!done);   
    System.out.println("Number obtained: " + d1);                                                                
  }                                                                                 
}        

これは、ダブルが得られなかった場合にのみプロンプトを表示し続けます。ダブルになると止まります。

于 2013-09-01T19:58:55.817 に答える
0

Hello Guys ループ内でスキャナーオブジェクトを初期化するだけで、ループがコードを実行するたびに待機するようになりました。

do
  {
   System.out.print("Please enter Side 1:\t");
  scanner=new Scanner(System.in);

  if(scanner.hasNextInt())
  {
   d1=(double)scanner.nextInt();
   i=0;

  }
   else
   {
   System.out.print("Side shoud be a number!\t");
   i=1;
   }

  }
  while(i==1);

回答ありがとうございます。

于 2013-09-01T20:01:51.100 に答える