对此非常陌生,我已经用尽了许多尝试来弄清楚为什么它不起作用但却无法得到它。
private int indexOf(int searchingNum)
{
int x = searchingNum;
for (int i = 0; i<numberArray.length; i++){
if (numberArray[i]==x)
index = i;
else
index = -1;
}
return index;
}
public boolean addNumber(int numberToAdd)
{
int x = numberToAdd;
if (indexOf(x)!=-1)
return false;
if (count<numberArray.length&&indexOf(x)==-1){
count++;
numberArray[count-1] = x;
return true;
}
if (count>=numberArray.length&&indexOf(x)==-1){
count++;
newArray = Arrays.copyOf(numberArray, 2* numberArray.length);
numberArray = newArray;
numberArray[count-1] = x;
}
return true;
}
该方法不应允许重复,但确实如此。任何指向正确方向的人都会非常感激。
谢谢。
答案 0 :(得分:2)
您的indexOf
不正确:由于您在找到匹配项后继续循环,因此除非数组中的最后一项恰好匹配,否则您的代码将返回-1
。
要解决此问题,请从循环内部返回i
:
for (int i = 0 ; i < numberArray.length ; i++) {
if (numberArray[i]==x)
return i;
}
// If we are here, we did not find anything; return -1
return -1;
答案 1 :(得分:1)
以下是您的代码的精确版本:
private boolean contains(int searchingNum)
{
for (int i = 0; i<numberArray.length; i++){
if (numberArray[i]==x)
return true;
}
return false;
}
public boolean addNumber(int numberToAdd)
{
int x = numberToAdd;
if (contains(x))
return false;
if (count<numberArray.length){
count++;
numberArray[count-1] = x;
}
else{
count++;
int []newArray = Arrays.copyOf(numberArray, 2* numberArray.length);
numberArray = newArray;
numberArray[count-1] = x;
}
return true;
}
试试这个。同时,如果数组之前没有初始化,它只能保证元素的唯一性,即只使用这种方法将所有元素添加到数组中。