我创建了一个名为Iset
的类,它接受整数并修改它的布尔数组的索引等效于整数为true。
e.g。如果我传递一个整数1,那么布尔数组setI[1]
将变为true。
我有一个名为include
的方法,如果提供的整数在那里,则返回true,如果不是,则返回false。但无论我做什么,我总是得到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;
}
}
答案 0 :(得分: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
因此,实际上并没有检查这些布尔值中的任何一个是真还是假,它只是检查它们是否相同。此方法将始终返回true ,除非索引i
中的布尔值是数组中唯一具有其值的布尔值(我建议尝试查看我是否正确)。例如,如果i = 1
您的方法将返回true
:
[false, true, false, false, ...]
[true, false, true, true, ...]
......没有其他价值观。
希望这会让事情变得更加清晰。
答案 1 :(得分:3)
请尝试此代码,我认为你应该添加一个funktion:set(),并更改一些include(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));
}
}
答案 2 :(得分:2)
您不必遍历整个阵列,只需询问方法是否包含您的号码。
public boolean isIncluded(int i) {
if (setI[i] == true){
return true;
}
return false;
}
甚至更简单:
public boolean isIncluded(int i) {
return setI[i];
}
P.S。我将您的方法名称更改为更有意义的内容
答案 3 :(得分:0)
试试这个:
public boolean include(int i) {
if (i >= size){
// To avoid ArrayIndexOutOfBoundsException
return false;
}
return setI[i];
}
答案 4 :(得分:0)
我不完全确定你的目标是什么,但是,在你的for循环中,你在n == i
进行自我比较,因此总是返回真实。