我是java新手并受this discussion的启发我编写了一个while循环版本here和一个for循环版本(这个问题)的程序搜索数组中的&# 34;项目" (int 20,在main方法中调用)并返回其值,它们都有效。
但是,在这个for循环版本中,第二个if语句,尤其是&#34; database [i] == database [database.length-1]&#34;,看起来是多余的,因为for循环中的终止条件已经指定i < database.length。
class For {
static int [] database = {17,18,19,20,21};
public static int findItem(int item) {
for ( int i=0; i<database.length; ++i ) {
if ( database[i] == item ) {
System.out.println("Item found at position: " + i);
return i;
}
if ( database[i] == database[database.length-1] && database[i] != item )
System.out.println("Item not found.");
}
return item;
}
public static void main(String [] args) {
findItem(20);
}}
我尝试使用else语句交换第二个if但是然后for循环在20之前评估数组中的每个值并打印&#34; Item not found&#34;三次。
这是for循环和if语句的可接受使用还是完全冗余?
答案 0 :(得分:2)
如果我理解正确,您希望在项目不在数组中时打印消息。这不应该在for循环中完成,因为此时你尚未处理整个数组。它应该在之后完成for循环:
for (int i = 0; i < database.length; i++) {
if (database[i] == item) {
System.out.println("Item found at position: " + i);
return i;
}
}
System.out.println("Item not found.");
return item;
现在,如果没有找到该项目,则返回该项目是个糟糕的主意。调用者将假定已在索引item
找到该项,这是不正确的。如果找不到该项,则应返回特殊值(或抛出异常),不能与有效索引混淆。例如:-1(这是在这种情况下返回的传统值):
for (int i = 0; i < database.length; i++) {
if (database[i] == item) {
System.out.println("Item found at position: " + i);
return i;
}
}
System.out.println("Item not found.");
return -1;
现在,打印返回的结果不应该由此方法负责。调用者应该这样做:
public static int findItem(int item) {
for (int i = 0; i < database.length; i++) {
if (database[i] == item) {
return i;
}
}
return -1;
}
public static void main(String[] args) {
int index = findItem(20);
if (index >= 0) {
System.out.println("Item found at position: " + index);
}
else {
System.out.println("Item not found");
}
}
答案 1 :(得分:1)
您可以通过移动&#34; not found&#34;来简化方法。循环后的消息,如下:
public static int findItem(int item) {
for (int i = 0; i < database.length; i++) {
if ( database[i] == item ) {
System.out.println("Item found at position: " + i);
return i;
}
}
System.out.println("Item not found.");
return -1; // not found
}
因为您已经在循环中退出了return
的方法,如果找到了该号码。
另请注意,我已将此方法更改为-1
,以防未找到该号码。这是一种常见做法,表示搜索未找到任何结果。