问题描述
|
public static int seqSearch(int numRecords,String[] stuName,double[] stuGpa,String nameKey,double gpaKey)
for(int i = 0; i < numRecords; i++)
if(stuName[i] == nameKey && stuGpa[i] == gpaKey)
return i;
return -1;
那么,我将如何使用if语句来控制它呢?我正在进行顺序搜索,以查找名称是否在数组中找到,以及gpa是否在数组中,那么它应该返回在(i)中找到的位置。但是,它所做的只是返回-1并打印出未找到任何内容。
解决方法
您在这里有两个独立的问题:
您应该使用
equals()
方法(或其中一种)比较字符串-否则,您要比较两个字符串是否是相同的引用(实例)而不是等效的字符序列。
您应该避免使用==
比较双打,因为双打的相等性更加细微。查看本文以获取更多有关原因的信息。
看到这个问题,为什么在Java中使用ѭ2进行浮点比较是个坏主意。
除此之外,我还要提到的是,您的实现假设stuName
和stuGpa
都是相同长度的数组。情况可能并非如此……并且可能值得在开始遍历数组之前进行断言。
,在Java中,字符串必须与.equals进行比较,而不是==。
if(stuName[i].equals (nameKey) && stuGpa[i] == gpaKey)
,你可能想要
if (stuName[i].equals(nameKey) && stuGpa[i].equals(gpaKey))
,if(stuName[i] == nameKey
不太可能是正确的,您正在比较对象标识而不是字符串内容。试试if(stuName[i].equals(nameKey)
,您正在比较两个字符串。
字符串是不可变的。
请使用\“ equalsIgnoreCase()\”或\“ equals()\”比较字符串
在这里查看示例
http://www.java-samples.com/showtutorial.php?tutorialid=224
,一个基本问题是
stuName[i] == nameKey
仅比较对象在内存中是否为相同的String对象。
您实际上想使用ѭ11来比较实际的字符串值。
并且您可能想使用.equalsIgnoreCase
来区分大小写。
,以下对于if语句是正确的。 stuName [i]是一个字符串,因此请与.equals进行比较。 stuGpa [i]是双精度型,因此请使用==。
if(stuName[i].equals(nameKey_ && stuGpa[i] == gpaKey)
,您的问题不是条件if语句,而是条件运算符==
。 ==
指向对象的指针值,as16ѭ方法将返回该对象所计算的内容。
就像大家之前说过的,在下一行中将==
切换为.equals
:
public static int seqSearch(int numRecords,String[] stuName,double[] stuGpa,String nameKey,double gpaKey)
for(int i = 0; i < numRecords; i++)
if(stuName[i].equals(nameKey) && stuGpa[i] == gpaKey)
return i;
return -1;
,要实际回答有关if语句控制的问题...
我相信您正在做的事与多重return语句没关系,但是...
对于我的方法,我个人更喜欢一个入口点和一个出口点。对于我有多个出口点,我总是感到很脏。
因此,我将考虑以下代码:
public static int seqSearch(int numRecords,double gpaKey)
int value = -1;
for(int i = 0; i < numRecords; i++) { // Don\'t forget your braces,they aren\'t required,but wait until you add a newline and forget to add them...
if(some.boolean().equals(comparison.here())) {
value = i;
break;
}
}
return value;
}
祝你好运。