for循环中的Java冗余第二个if语句

时间:2017-09-27 21:52:37

标签: java arrays for-loop if-statement

我是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语句的可接受使用还是完全冗余?

2 个答案:

答案 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,以防未找到该号码。这是一种常见做法,表示搜索未找到任何结果。