2016-12-18 30 views
1
import java.util.Scanner; 

public class hil { 
    public static void main(String[] args){ 
     Scanner m = new Scanner(System.in); 

     System.out.print("Insert a number:"); 
     int num = m.nextInt(); 

     int[] ar = { 10, 20, 30, 40, 50 }; 
     int sum = 0; 

     for (int i = 0; i < ar.length; i++) { 
      sum += i; 

      for (int n : ar) { 
       if (num == n) { 
        System.out.print(true); 
       } else { 
        System.out.print(false); 
       } 
      } 
     } 
    } 
} 

這是我的代碼 我得到正確的輸出,但它顯示了真假數組中所有的值。不僅是單一的價值。如何獲得輸入值的真布爾值和假布爾值,而不是值的其餘部分。如何讓單一真或假,而不是得到真或假的每個值數組

電流輸出:

插入數:20
falsetruefalsefalsefalsefalsetruefalsefalsefalsefalsetruefalsefalsefalsefalsetruefalsefalsefalsefalsetruefalsefalsefalse

期望的輸出:

插入數:20

+0

如果您正在查看數組是否包含值(例如用戶輸入的內容),[該問題已經有答案](http://stackoverflow.com/questions/1128723/how-can-i -test-if-an-array-contains-a-certain-value)..但是根據你的代碼,目前還不清楚它的意圖是什麼;你循環'ar.length'次保持一個'sum'變量,然後有一個嵌套循環,檢查用戶輸入是否匹配迭代..重新迭代@Mureinik說的......代碼應該做什麼? – txtechhelp

回答

0
import java.util.Scanner; 

public class hil { 
    public static void main(String[] args) { 
     Scanner m = new Scanner(System.in); 

     System.out.print("Insert a number:"); 
     int num = m.nextInt(); 

     int[] ar = {10, 20, 30, 40, 50}; 
     int sum = 0; 
     Boolean inArray = false; 
     for (int n : ar) { 
      sum += n; 
      if (num == n) { 
       inArray = true; 
      } 
     } 
     System.out.println(inArray); 
     System.out.println(sum); 
    } 
} 

注:我假設你需要的元素的總和,這就是爲什麼你試圖使用另一個循環。

+0

非常感謝你的回答。我想我現在明白了。 – shaikh95

+0

@ShumailaShaikh:如果你認爲答案對你有幫助,請接受答案。 –

0

假設您只是想檢查用戶提供的數字是否在該數組中;那麼你必須檢查確切的;並記住該決定:

boolean numberFound = false; 
for (int numberFromArray : nums) { 
    if (numberFromArray == num) { 
    numberFound = true; 
    } 
} 

然後在循環之後...打印該布爾值。一旦。

0

只需在循環外存儲一個布爾值,然後打印該值。

boolean inArray = False; 
for(int n: ar){ 
    if (num == n){ 
     inArray = True; 
    } 
} 
System.out.print(inArray); 
+0

布爾值設置爲「true」時,爲什麼不添加「break」? – txtechhelp

+0

@txtechhelp不影響呼叫的預期運行時間。我認爲這會給已經工作的代碼添加更多混亂。 – Alex

1

我相信你正在尋找髒位模式。

import java.util.Scanner; 

public class hil { 
    public static void main(String[] args){ 
     Scanner m = new Scanner(System.in); 

     System.out.print("Insert a number:"); 
     int num = m.nextInt(); 

     int[] ar = { 10, 20, 30, 40, 50 }; 

     Boolean found = false; 

     for (int n : ar) { 
      if (num == n) { 
       found = true; 
       break; 
     } 

     System.out.print(found); 
    } 
} 

的想法是初始化位(布爾在這種情況下)是「乾淨」然後給它一個機會獲得「髒」。一旦「髒」,它保持「髒」。無論您認爲「乾淨」是真還是假,該模式都可以工作。

這裏的邏輯結果與'將所有這些相等比較放在一起'相同。

添加break只是一種微觀優化。沒有它,邏輯就是一樣的。添加它只是使它快一點點。也許。

+0

upvoted是唯一一個提到'break'..只有在這種情況下的微型優化(因爲在該數組中只有5個項目),但OP需要注意的事情,因爲他們是新手。 – txtechhelp

+0

我認爲人們可能會爭論很長一段時間,如果*新手*應該擔心微觀優化和第一次使用break語句...... – GhostCat

+0

我稱之爲微觀優化,因爲在大O標記的世界中,這個平均值作爲O(0.5n),這仍然只是O(n)。 IE是一種改進,如果它能夠更輕鬆地閱讀代碼,我會毫不猶豫地將其刪除。 – CandiedOrange

-2

我想如果你想打印出真實的。你應該把它放在雙引號中。如:System.out.println(「true」);

........................我可能是錯的......但我試圖建議一個可能的解決方案。

+0

這不會真正幫助OP。 – 2ps