2014-02-10 73 views
0

我做了一個名爲Iset是採用整數並修改它的布爾數組的索引相當於整數真正的類。布爾數組比較的Java

例如如果我傳遞一個整數1,那麼布爾數組setI[1]將變爲true。

我有一個名爲include方法,如果所提供的整數是有假,如果不是,則返回true。然而無論我做什麼,我總是得到true。我已確保將數組中的所有內容都設置爲false,並在代碼中添加更多數字。很顯然,我在這裏失蹤真的很明顯的東西:

public class Iset { 
    public int size; 
    boolean[] setI; 

    Iset(int a) { 
     this.size = a; 
     this.setI = new boolean[size]; 
    } 

    public boolean include(int i) { 
     for (int n = 0; n <= size; n++) { 
      if (setI[n]== setI[i]){ 
       return true; 
      } 
     } 
     return false; 
    } 
} 
+2

什麼是'SETI類型'?什麼是「尺寸」?向我們展示填充'setI'的代碼。 – 2014-02-10 09:04:30

+0

'採用整數並將它們存儲在布爾數組中'您應該重新考慮這一點。什麼是關於一個int數組? – PeterMmm

+1

你爲什麼要將整數存儲在'boolean'數組中?你究竟做得如何? –

回答

2

你不必走完整陣列上,只問方法,如果包括你的電話號碼。

public boolean isIncluded(int i) { 
    if (setI[i] == true){ 
     return true; 
    } 
    return false; 
} 

或更簡單:

public boolean isIncluded(int i) { 
    return setI[i]; 
} 

附:我改變了你的方法名更有意義

+0

'contains'可能會更好,因爲那正是在集合的API使用。 – chrylis

+0

總的來說是的,但我們不知道上下文是什麼,它可能是「isIncluded」更有意義;) –

+0

這是一個非常簡單的方法。問題在於,當我覺得太辛苦時,我最終會變得越來越複雜。謝謝 – Softey

0

試試這個:

public boolean include(int i) { 
    if (i >= size){ 
     // To avoid ArrayIndexOutOfBoundsException 
     return false; 
    } 
    return setI[i]; 
} 
0

我不能完全肯定你是什麼之後,但是,在你的for循環你是一個selfcomparison時n == i和從而永遠迴歸真實。

3

其他的答案給瞭解決方案,但我認爲,我們還可以得到一個去解釋,爲什麼你原來的代碼是像你說的稍有不妥。這裏是你的include()方法是做僞代碼:

for each boolean called 'setI[n]' in the array: 
    if 'setI[n]' is the same as the boolean at 'setI[i]': 
     return true 

因此,它實際上沒有檢查如果其中布爾是真的還是假的,它只是檢查,如果它們是相同的。 除非在指數i布爾是唯一一個與它的價值在陣列中(我建議嘗試,要看到,如果我是正確的),此方法將總是返回true。例如,如果你的i = 1方法將返回true爲:

[false, true, false, false, ...] 
[true, false, true, true, ...] 

...,沒有其他價值。

希望這使事情變得更清晰一點。

+1

感謝您加強所提出的想法。現在變得更有意義了。 – Softey

3

請試試這個代碼,我想你應該添加的Funktion:集(),並改變一點點的包括(int i)以

public class Iset { 
public int size; 
boolean[] setI; 

Iset(int a) { 
    this.size = a; 
    this.setI = new boolean[size]; 
} 

public boolean include(int i) { 

    return setI[i]; 
} 

    //set your values in the boolean array "setI" to "true" 

public void set(int... values) { 

    for (int i : values) { 
     setI[i] = true; 

    } 

} 

public static void main(String[] args) { 

    Iset mm = new Iset(100); 

    mm.set(25, 40, 22); 

    System.out.println(mm.include(25)); 

} 

}