2017-02-16 15 views
1

何らかの理由で、私が何をしていても、Javaプログラムでif elseステートメントを作成するたびに、ifステートメントを実行するか、ifそれ以外は文。elseステートメントはif elseステートメントでは実行されません

import java.util.Scanner; 

public class Week06_NelsonPimentel_Assignment { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     int[] validnum; 
     int i = 0; 
     validnum = new int[5]; 

     System.out.println("Please enter a number between 50 and 100"); 

     while (i < validnum.length) { 
      validnum[i] = input.nextInt(); 

      if (validnum[i] <= 101 || validnum[i] >= 49) { 
       System.out.println("yes"); 
       i++; 
      } else { 
       System.out.println("no"); 
      } 
     } 

    } 

} 
+0

以下のことが原因で、この大きなプログラムの小さい部分、今のelse文が単に正しく – zenon

+5

'validnumに動作しない場合は、[I] <= 101 ||である奇妙なプロセスのように思える場合validnum [i]> = 49'は常にtrueです – Eran

+4

あなたは '||'ではなく '&&'を意味します。しかし、あなたのロジックがあなたのメッセージと一致しないことに注意してください。 –

答えて

4

if (validnum[i] <= 101 || validnum[i] >= 49) {もちろんiの配列の範囲外である場合を除き、常にtrueに評価され、その「はい」印刷とiがインクリメントされます。

||&&に置き換えますか?

また、別々のステップを2つ設けるのではなく、int[] validnum = new int[5];と書くことを検討してください。そうすれば、validnumは決して初期化されていない状態になることはなく、より安定したプログラムになる傾向があります。

+0

"そのように、validnumは初期化されていない状態には決してありません" –

+0

これは最初はうまくいきませんでしたが、実際は非常にうまくいっています。 – zenon

+0

@AndyTurner:初心者が理解できる用語を使用するのは難しいです(少なくとも難解です)。あなたは良いアイデアを持っていますか? – Bathsheba

0

validnum[i]がループインデックスを進化させない場合、コードにのエンドレスループがあります。 ifのうち、i++;を取るか(注:あなたがforループを使用している場合はi++;をニートはありません):であなたのwhileループを置き換える

for (int i = 0; i < validnum.length; i++) { 
     validnum[i] = input.nextInt(); 

     if (validnum[i] <= 101 || validnum[i] >= 49) { 
      System.out.println("yes"); 
     } else { 
      System.out.println("no"); 
     } 
} 

なぜあなたは配列を使用していますか?投稿したコードでは、メモリの無駄に見えます。

0

ビジネスロジックによって、ifステートメントは常にtrueを返します。

私の観察: 100よりも、あなたが50以上よりも50〜100以下の間で入力しているかどうかは50から100

validnum[i] = input.nextInt(); 
if (validnum[i] <= 101 || validnum[i] >= 49) { 
} 

間の番号を入力してくださいステートメントは、常にどちらかの満足の1れます条件

validnum[i] <= 101 
validnum[i] >= 49 
関連する問題