2016-11-23 2 views
0

おはようございます、何も入力しないとループがelse条件になるのはなぜですか?

私はこのループがまったく機能しない理由を失っています。それは私のアプリケーション全体を台無しにしています。以下のコードです:

System.out.println("Please tell me what to count till?"); 
    do 
    { 
     try 
     { 
      newEndingValue= input.nextInt(); 
      if(newEndingValue >= 0 || newEndingValue <= 0) 
      { 
       break; //breaks the loop 
      } 
     } 
     catch (InputMismatchException e) 
     { 
      System.out.println("My Apologies, but COMMAND NOT RECOGNIZED!" + "\nPlease tell me what to count till?"); 
      input.next();  

     }   
    } 
    while(!input.hasNextInt()); 

    v.setEndingValue(newEndingValue); 


System.out.println("Please tell me what to count from?"); 
if(increasingOrDecreasing.equalsIgnoreCase("Increasing")|| increasingOrDecreasing.equals("++") || increasingOrDecreasing.equals("+")) 
    { 
    do 
    { 
     try 
     { 
      newInitialValue = input.nextInt(); 
      if(newInitialValue < v.getEndingValue()) 
       { 
       break; 
       } 
      else{ 
       System.out.println("My Apologies, but starting point value must be smaller than ending point value!" + "\nPlease tell me what to count from?"); 
       newInitialValue = (v.getEndingValue()+10);//overrides the value to something that forces the loop back 
       } 
     } 
     catch (InputMismatchException e) 
      { 
      System.out.println("My Apologies, but COMMAND NOT RECOGNIZED!" + "\nPlease tell me what to count from?"); 
      input.next();  
      }   
    } 
    while(!input.hasNextInt() || newInitialValue > v.getEndingValue()); 
    } 
else 
{ 
    do 
    { 
    try 
     { 
     newInitialValue = input.nextInt(); 
     if(newInitialValue > v.getEndingValue()) 
      { 
      break; //breaks the loop 
      } 
     else{ 
      System.out.println("My Apologies, but starting point value must be larger than ending point value!" + "\nPlease tell me what to count from?"); 
      newInitialValue = (v.getEndingValue()-10);//overrides the value something that forces the loop back 
      } 
     } 
    catch (InputMismatchException e) 
     { 
     System.out.println("My Apologies, but COMMAND NOT RECOGNIZED!" + "\nPlease tell me what to count from?"); 
     input.next(); //consumes the erroneously typed string value 
     newInitialValue = (v.getEndingValue()-10); 
     }   
    } 
    while(!input.hasNextInt() || newInitialValue < v.getEndingValue()); 
    } 

だから出力が無入力されたが、その後、1000年、次のように:

何までカウントすることを教えてください?

なし

私の申し訳ありませんが、コマンドは認識されません!

何をカウントするか教えてください。

何をカウントするか教えてください。

私の謝罪ですが、開始点の値は終了点の値よりも小さくなければなりません!

何をカウントするか教えてください。

なぜ2番目に書かれたelse文にまっすぐ行くのですか? なぜnewInitialValueのユーザー入力をスキップしますか? ますのでご注意くださいその編集コードはnewEndingValueのための文字列を入力して、正しく番号を入力した後、以下の値ブロックを終了した後、これは私のエラーを私のRIDが、場合は再び走った別のものを生成し、ユーザが協力した場合:

... 
newInitialValue = input.nextInt(); //essentially gets skipped over by compiler only when previous catch statement is triggered 
System.out.println("Please tell me what to count from?"); 
if(increasingOrDecreasing.equalsIgnoreCase("Increasing")|| increasingOrDecreasing.equals("++") || increasingOrDecreasing.equals("+")) 
{... 

"しかし、開始点の値は終了点の値より小さくなければならない"ので、if(incre ...)ループとdoループとtryループでそれぞれの作業を推測することができます。しかし、newI ... = input ...とif(newIntia ...)のコード行をスキップします。私は手動でnewInitialValue = 2(パラメータ内)を入力しても、このelse節に移動します。

+2

をオーバーライドするあなたのコードが意味をなさないのであれば、どの時点でロジックが 'else'ブロックに落ちているのかを指摘できますか? – px06

+1

ブレークポイントを設定し、コードがどのように流れるかを確認します。 – geft

+0

私がキャッチコマンドを必要とせずに実行したときにうまくいきました。ループしたときのキャッチについての何かが、その値のために働くが、次のコードブロックが壊れてしまう。 –

答えて

0

-_-だから、問題はしばらくステートメント内にある:

while(!input.hasNextint()) 

これは先に見て、次のユーザ入力をチェックしますが、漁獲量は1を消費するので、それが次の次に見て、それが暗い取得します。 ..本質的に私はこれを使用しない場合は動作します。 は、代わりに私が使用:

while(isError == true) 

と声明私が持っている場合は、ネストされたとのdoループの下:

if(blah blah blah){ 
isError=false; 
break; 

と次のループブロックの前に私は単にのisError

isError=true; 
//next block of code 
-1

ここで問題となるのは、値1が真、値2が真、値3が真の場合にjavaに何かをしてから、それを使っても同じことをするということです。他のパラメータを理解するためには& &を使用する必要があります。

+0

私はフォローしていません。詳しく教えてください。 try-catchループ内でネストされたelse文にジャンプしています。 –

+0

"Increasing"がtrueで、他のすべてがfalseであると言うことができます.Javaはifを実行した後にifを入力し、elseに移動し、 "Decreasing"がfalseの場合(ifがfalseの場合)それは何か他のことをするでしょう。あなたの声明が偽であるときにelseを使用します。 – Kostasfra

+0

あなたの問題がありません。私たちは、コンパイラが大きなコードブロックをスキップし、 "...開始点の値は終了点の値よりも小さくなければなりません!"という出力を出力するelse節に行くことを知っています。 if文で真でなければならないが、前の行でオーバーライドされるはずの何らかの理由で、コンパイラはユーザー割り当てをスキップしていて、値が何であるかにかかわらずブロックしてelseだけに進む。 –

関連する問題