2017-02-16 150 views
1

由於某些原因,無論我做什麼,每當我在Java程序中創建if else語句時,它都只執行if語句,或者只執行if語句和其他聲明。其他語句不會在if語句中執行

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'始終爲真 – Eran

+4

您的意思是'&&',而不是'||'。但請注意,您的邏輯與您的信息不符。 –

回答

4

if (validnum[i] <= 101 || validnum[i] >= 49) {將總是爲true,等等「是」將被打印和i遞增,當然,除非i是陣列的邊界之外。

||替換爲&&

也考慮寫int[] validnum = new int[5];而不是有兩個單獨的步驟。這樣,validnum永遠不會處於未初始化的狀態,這往往會導致更穩定的程序。

+0

「這樣,validnum永遠不會處於未初始化狀態」明確的分配? –

+0

起初它並沒有工作,但現在它實際上工作得很好,謝謝大家的快速反應,因爲這已經讓我分裂了3個小時! – zenon

+0

@AndyTurner:使用初學者會理解的術語很棘手(或者至少我覺得很棘手)。你有更好的主意嗎? – Bathsheba

0

你有一個無限循環在你的代碼,當validnum[i]不符合你的條件,你不提前你的循環索引。 以i++;if的或更換您的while循環(注:你不啃老族i++;如果您使用for環路):

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。

我的觀察: 請輸入號碼50和100

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

之間無論你是50之間進入到100或小於50或100的if語句將始終滿足任一大於以下條件

validnum[i] <= 101 
validnum[i] >= 49