当前位置: 首页 > 知识库问答 >
问题:

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

于正志
2023-03-14

我是java新手,受这次讨论的启发,我在这里写了一个while循环版本和一个for循环版本(这个问题),这个程序在数组中搜索一个“项”(在main方法中称为int 20)并返回其值,这两个版本都有效。

然而,在这个for循环版本中,第二个if语句,尤其是“database[i]==database[database.length-1]”,看起来是多余的,因为for循环中的终止条件已经指定

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之前的每个值,并打印了三次“Item not found”。

这是对for循环和if语句的可接受使用,还是完全冗余?

共有2个答案

姬飞飙
2023-03-14

您可以通过在循环之后移动“not found”消息来简化该方法,如下所示:

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的方法,以防找不到数字。这是一种常见的做法,表明搜索没有找到结果。

柏夕
2023-03-14

如果我理解正确,那么如果该项不在数组中,您希望打印一条消息。这不应该在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;

现在,如果没有找到物品,就把它退回是个糟糕的主意。调用者将假定在索引中找到了该项,这是不正确的。如果找不到项,则应返回一个特殊值(或引发异常),不能将其与有效索引混淆。例如:-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");
    }
}
 类似资料:
  • 问题内容: 目前无法打破此循环。如果要在此列表中找不到变量,我想破坏它,以便它可以移动另外两个循环。它期望在循环的顶部有一个缩进的块,但是如果更改循环的开头或开头的位置,它将无法正常工作。救命! 问题答案: 正如人们在对您的问题的评论中提到的那样,您需要分别打破每个循环,仅停止其所在的循环 两个 循环都需要这样做 如果您也想打破while循环,那么您也可以添加该循环。

  • 我有一个380行20列的表格。我想从该表中删除符合特定条件的行。 为了澄清问题,假设我有以下列表: 我想删除在列表中找到姓名的所有人员的数据。 例如,假设我的数据如下所示: 我想删除、和的数据。所以输出应该是: 我的代码正在运行,但数据没有从我的原始数据中删除。当我打开新的测试.txt文件时,我可以看到数据没有被删除。 我可以肯定错误在< code > if data[row][0]= =(I f

  • 对Java来说很新鲜,我在大学的一个入门班做一个项目。我正在尝试做一个方法,在String数组中搜索输入的状态并返回索引。如果用户输入不在数组中的查询,我希望它要求一个新的状态来搜索。我的例外是说“变量statePotion可能尚未初始化。”下面是代码。 提前谢谢!

  • 有人能帮我找出为什么Instachat:Stick\u out\u舌头\u winking\u eye:'和'Docs To Go'的代码没有返回False吗™ 免费办公套房'?它们包含Unicode大于127的字符(分别为emoji和TM),因此从技术上讲,这两个字符都应该返回False。 我不明白为什么else条款在这里不起作用。 下面应该是我的代码的预期输出:True False 然而,实际

  • 问题内容: 只是一个实验程序。但是第二个for循环似乎没有运行。如果我切换for循环的位置;同样,第二个位置的循环不会运行。为什么会这样呢? 问题答案: 文件不是列表。您不能在不倒退文件对象的情况下循环播放它们,因为完成阅读后文件位置不会重置为开始。 您可以在循环之间添加: 但你会 多 由不循环两次更好。您已经在第一个循环中获得了信息。只需循环 一次 : 您的代码仅对列表进行排序;该列表将不符合要