2016-08-09 7 views
-4

私はJavaに慣れていませんが(実際は3日目のみですが)、新しいコードを学習するのは楽しいです。私の学位の一部としてMATLABを学ぶときも同じでした。本質的に私は、それぞれのレッスンが教えようとしていることよりも一歩進んでいくのが好きです。Java:ユーザー入力を検証する方法

私は現在、2つの数値を加算、減算、乗算、除算し、そのコア要素を正しく動作させる基本的な電卓を作成しています。この場合の私の「一歩前進」は、ユーザー入力を介して終了し、無効なユーザー入力によるエラーを防止するオプションでプログラムを繰り返すことでした。

私はこの小さなプロジェクトの繰り返しセクションと終了セクションを完成させることができましたが、無効なユーザー入力、つまり目的のIntやDoubleの代わりにStringが入力されたことによるエラーを防ぐことができませんでした。私の目標は、エラーを防ぎ、代わりに有効な入力を求めることです。

私が集めたことから、私の問題はTry/Catch Statementを使って対処できますが、このような文を正しく実装する方法はわかりません。私の最高の試みは、オンラインで同様の事例を実行した後に失敗したことになります。これは、プログラム自体をコード化したものです。私が言ったように、私は新しく、多くのWhileループを使用して目的の動作を達成しましたが、これはおそらく非常に非効率的なやり方です。

うまくいけば、誰かがこれまでの私の最高の試み、
コナー

正しい方向に私を指すことが可能である:

int InputValue; 
InputValue = 1; 
while (InputValue == 1) 
{ 
    try 
    { 
     System.out.print ("Enter First Number: "); 
     First = Input.nextDouble(); 
     InputValue = 0; 
    } 
    catch (NumberFormatException e) 
    { 
     System.out.println ("Invalid Input"); 
     System.out.println (" "); 
     System.out.print ("Enter First Number: "); 
     First = Input.nextDouble(); 
    } 
} 

しかし、上述したように、これは「第1」見えないように思わ
"ローカル変数Firstが初期化されていない可能性があります"

また、試してみてください:

int InputValueX; 
InputValueX = 1; 
do 
{ 
    System.out.println (" "); 
    System.out.print ("Enter First Number: "); 
    while (!Input.hasNextDouble()) 
    { 
     System.out.println ("Invalid Input"); 
     Input.next(); 
    } 
    First = Input.nextDouble(); 
    InputValueX = 0; 
} 
while (InputValueX == 1); 

これにより、コードは実行できますが、無効な入力エラーは処理されません。

そして、私はそれが私の全体のプログラム(またはあなたが私はそれを試してみましたが、エラーを得た複数のブールを使用することができますか?)

http://pastebin.com/TTuCNQbx
ループしているものであるように私は、ブールを使用することができるとは思わない - 私のプログラムを、
長いだけで100行以上 - 〜45および85

+0

があります。まずgoogleを使用してください。 –

+0

[java.util.Scannerを使用して入力を検証する]の可能な複製(0120-365-990)。 – xenteros

+0

私は明らかに、私はGoogleを使い、この非常にフォーラムでいくつかの似たような例を見つけました。しかし、私がTry/Catchを使用して同様のプロセスを実行しようとすると、このセクションの後にコードが破損してしまいました。それを記述する最善の方法は、変数「最初に」を試した後に、その文に続くコードが「最初」を見つけることができなかったことです。 –

答えて

0
boolean firstNumber = false; 
while (!firstNumber) { 
    try { 
     First = Input.nextDouble(); 
     firstNumber = true; 
    } catch (InputMismatchException e) { 
     firstNumber = false; 
     Input.nextLine(); 
    } 
} 

このはずループ間の関心領域は、AA適切な入力が入力されましたまで。 System.outの出力を追加して、ユーザーに入力が無効であり、プロパー入力がどのように表示されるかを知らせることをお勧めします。

0

実際にはすべてのユーザがStringを入力します。その後、受け入れ可能な形式であるかどうかを確認するために、Stringを有効にする必要があります。

はあなたがすでにString inputに保存され、ユーザーの入力を持っていると仮定しましょう:

String input; 
//some code for getting the input 
try { 
    double dbl = Double.parseDouble(input); 
} catch (NumberFormatException e) { 
    e.printStackTrace(); 
} 

これはdoubleStringを解析するための一般的な構成です。今すぐあなたはあなたが望むものを見つけるまで、入力をスキャンするループにそれをラップすることができます。自由にフラグを使用してください。

boolean found = false; 
try { 
    double dbl = Double.parseDouble(input); 
    found = true; //this line won't be executed if parsing fails 
} catch (NumberFormatException e) { 
    e.printStackTrace(); 
    found = false; 
} 
+0

catchブロック内の「found = false」は不要です。あなたが正しく言ったように、例外がスローされたときにfalseが残っています:) –

+0

@progressive_overload私は知っていますが、OPがコードを変更した場合 – xenteros

0

try/catchブロックでコード内のInput.next *のような行を囲みます。 RuntimeExceptionをキャッチしたり、以下のような特にInputMismatchException(ベストプラクティス)に、チュートリアルのトンは、あなたがそれらを試した後に戻ってきてください、あなたはまだ立ち往生した場合に、私たちは、あなたを助けてみましょう:)そこ

boolean Run = true; 
    while (Run) 
    { 
     Scanner input = new Scanner (System.in); 
     int i = 0; 
     try 
     { 
      i = input.nextInt(); 
     } 
     catch(InputMismatchException ime) 
     { 
      System.out.println("message to enter the input in valid format"); 
     } 
    } 
関連する問題