0

数年後の人の投資を計算するプログラムを書いています。ユーザーに、名前、投資額、利率、年数を入力するように求めます。if...else ステートメントを使用して入力の検証を行うことになっています。チェックの 1 つは、ユーザーが正しいデータ型を入力したかどうかを確認することです。これは入門 Java クラス用です。1 週間前にメソッドの章を終えたので、これは初心者向けのものです。データ型チェックを行う方法を理解しているようです。int 型に対して hasNextInt を試しましたが、まったく学習していない例外が発生します。Pattern クラスと Match クラスに関する情報をオンラインで見つけましたが、まだ見たことのないものがたくさんあります。これは、正しい入力を取得するために私が書いたメソッドの 1 つです。

  //Define method for input validation, integer type
  public static int getValidInt(String messagePrompt, String messagePrompt2, String messagePrompt3){
  Scanner input = new Scanner(System.in);//Create scanner
  int returnValue;
  int j = 0;
    do {//Start validation loop
        System.out.printf(messagePrompt); //Print input request        
        returnValue = input.nextInt();

    if (returnValue <= 0) { //Check if user entered a positive number 
        System.out.println(messagePrompt2);//Print error message
      }
    else if (!input.hasNextInt()) {
        System.out.println(messagePrompt3);//Print error message

        }          
      else {
          j++;
          }
    } while (j == 0);//End validation loop

  return returnValue;  

}

チェックの順序が正しいかどうかわかりません。どんな助けでも大歓迎です。ありがとうございました。

4

2 に答える 2

0

定義済みの入力フィールドが 4 つだけで、追加の項目をチェックする必要がない場合、ここで do while ループを使用する理由がわかりません。このメソッドが何をするべきなのかわからないかもしれませんが、入力が有効かどうかを定義するある種の整数を返していますか、それとも実際に値を保存する必要がありますか? 前者の場合、ブール値または列挙型を返さないのはなぜですか?

また、最初に単に nextInt を呼び出している理由もわかりませんが、次回は nextInt があるかどうかを確認しています。

また、hasNextInt を呼び出すときに発生する例外の種類については言及していませんが、どうやらこれはIllegalStateException. http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.htmlでJava ドキュメントを参照するか、関連するコース資料を読むことをお勧めします。

于 2013-10-06T07:42:14.770 に答える