1

プログラムをより合理化するために(どこでも試してキャッチすることなく)、データを取得するためだけに別のメソッドを作成しようとしました。DoublesとStrings用のものもあります。どういうわけか、このメソッドを使おうとすると、完全に無視され、コメントのように渡されます。私が間違っていることはありますか?

public int inputint(){
     Scanner sc = new Scanner (System.in);
     int variable = 0;
     boolean valid = true;
     do{
        try{
           if (variable >= 0 && valid){
           }
           else if(valid){
              System.out.print("Please enter positive values only: ");
           }

           valid = true;
        }
           catch (InputMismatchException e){
              System.out.print("Please enter numerical values only: ");
              sc = new Scanner(System.in);
              valid = false;
           }
     }while (!valid || variable < 0);
     return variable;
  }
4

2 に答える 2

2

まず第一に、あなたのコードはめちゃくちゃ理解しにくいです。(または私が推測するだけかもしれません)

しかし、あなたがあなたのコードを見れば

Scanner sc = new Scanner (System.in);
     int variable = 0;
     boolean valid = true;

Scannerオブジェクトを作成していますが、メソッドのどこにも実際に使用していません。

次の数行、

if (variable >= 0 && valid){
       }

これらの条件の両方が満たされています。したがって、括弧内に何も含まれていない場合、コードは実行されません。したがって、そこから、変数の値である0を返すだけです。

したがって、実際にScannerクラスを使用して整数を取得する必要があります。よくわかりませんが、その方法は

Scanner.nextInt();

編集:JavaDocsからhttp://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html

簡単に使用できます

Scanner sc = new Scanner(System.in);
 int i = sc.nextInt();

スキャナーから整数を読み取ります。

于 2012-06-17T08:41:28.437 に答える
0

変数variableが割り当てられ0 、valid変数が割り当てられtrueます。その結果、while (!valid || variable < 0)式は常に評価されfalse 、do-whileループは1回だけ実行されます(スキャナーは作成されません)。

変数をチェックする前にユーザー入力を読みたいと思うvariableので、おそらくスキャナーを作成し、if (variable >= 0 && valid)チェックを行う前に入力を読みたいと思います。

valid ちなみに、おそらく変数をスキップしてvariable =sc.nextInt();を使用し、@Austinの回答と比較することができます。

于 2012-06-17T08:52:45.697 に答える