日期:2014-05-20  浏览次数:20693 次

数组的查找问题。。。
public class ArraySearchTest
{
public static boolean arraySearch(int[] array, int a)
{
if(array == null)
{
return false;
}

for(int i = 0; i < array.length; i++)
{
if(array[i] != a)
{
return false;
}
}

return true;

}


public static void main(String[] args)
{
int[] array = {4, 6, 2, 3, 1};

int value = 4;

System.out.println(arraySearch(array, value));
}
}

采用这个输出的结果是 false;

改动下方法:
public static boolean arraySearch(int[] array, int a)
{
if(array == null)
{
return false;
}

for(int i = 0; i < array.length; i++)
{
if(array[i] == a)
{
return true;
}
}

return false;

这个时候输入的结果为 true;

忘各位大侠看看。谢谢了。

------解决方案--------------------
后一个方法对.
前一个方法,只要有一个不相等,后面不比较了,返回false.
------解决方案--------------------
你想说明啥?第一段程序明显有逻辑上的错误啊。

我重新排个版,并精简下:
for(int i = 0; i < array.length; i++) {
if (array[i] != a) return false; // 逻辑BUG语句
}
return true;


你这个程序,只要 array[0] != a,直接就return false了,后面array[1]~array[4]根本没机会参与判断。

注意return是立即结束当前函数的。
------解决方案--------------------
for(int i = 0; i < array.length; i++)
{
//第一次i=0的时候array[i] == a 不执行if内语句,
//第二次i=1的时候array[i] != a 执行if内语句,直接返回false了,
if(array[i] != a){
return false;
}
}

因为你要判断是否包含这个数字,所以你应该是看到有这个数字就返回true否则返回false
而不是看到一个数不和这个数一样就返回false才对,所以你前一种写法是错误的,后边的写法才是正确的