在Java中使用for循环时如何实现return语句?

在Java中使用for循环时如何实现return语句?,java,arrays,loops,return,Java,Arrays,Loops,Return,我正在创建一个方法,如果变量elt存在于数组中,它将返回该变量。如果它不存在于数组中,我需要返回null 问题是,我正在使用for循环中的if语句检查数组中每个项中的变量elt。我不认为我可以在for循环的if语句末尾放一个return语句,因为每次它执行if语句时,潜在的返回值都会不同。我认为这将在每次循环for循环时生成一个新的返回值。为了解决这个问题,我创建了一个名为exist的布尔临时变量。如果为true,该方法将返回变量elt。如果为false,它将返回null。下面是我正在使用的代码

我正在创建一个方法,如果变量elt存在于数组中,它将返回该变量。如果它不存在于数组中,我需要返回null

问题是,我正在使用for循环中的if语句检查数组中每个项中的变量elt。我不认为我可以在for循环的if语句末尾放一个return语句,因为每次它执行if语句时,潜在的返回值都会不同。我认为这将在每次循环for循环时生成一个新的返回值。为了解决这个问题,我创建了一个名为exist的布尔临时变量。如果为true,该方法将返回变量elt。如果为false,它将返回null。下面是我正在使用的代码

public T remove(T elt) {
        boolean exist;

        for (int i=0; i<data.length; i++) {
            if (data[i] == elt) {
                data[i] = null;
                size--;
                exist = true;
                System.out.println(exist);

                for (++i; i < data.length; i++) {
                    data[i-1] = data[i];
                }
            }
        }
        if (exist = true)
            return elt;
        else
            return null;
    }

我的问题是,有没有一种方法可以在不使用临时变量的情况下将return语句塞进方法中?

不需要使用一个额外的变量。您可以直接从for循环返回。而不是write exist=true write返回elt并在末尾返回 而不是

if (exist = true)
            return elt;
        else
            return null;

只需写入return null,这样,如果elt不存在,它将返回null。

不需要使用一个额外的变量。您可以直接从for循环返回。而不是write exist=true write返回elt并在末尾返回 而不是

if (exist = true)
            return elt;
        else
            return null;

只要写returnnull,这样如果elt不存在,它就会返回null。

您几乎可以将return语句放在任何地方

要回答您的问题,您可以在内部for循环后放置一个返回,如下所示:

public T remove(T elt) {

    for (int i=0; i<data.length; i++) {
        if (data[i] == elt) {
            data[i] = null;
            size--;
            System.out.println(exist);

            for (++i; i < data.length; i++) {
                data[i-1] = data[i];
            }

            return elt;
        }
    }

    return null;
}

你几乎可以把return语句放在任何地方

要回答您的问题,您可以在内部for循环后放置一个返回,如下所示:

public T remove(T elt) {

    for (int i=0; i<data.length; i++) {
        if (data[i] == elt) {
            data[i] = null;
            size--;
            System.out.println(exist);

            for (++i; i < data.length; i++) {
                data[i-1] = data[i];
            }

            return elt;
        }
    }

    return null;
}

在for循环中放一个return是非常好的。该方法将在您返回后立即完成并退出。请注意,您发布的解决方案和接受的解决方案的不同之处在于,您的解决方案会删除数据中出现的所有elt,而接受的解决方案只删除第一次出现的elt并立即退出。这可能是好的,也可能是坏的,这取决于你的方法的契约。@JiriTousek,谢谢你指出这一点,你是绝对正确的!尽管如此,似乎即使是我发布的解决方案也只删除了第一次遇到的问题。你能给我一个提示,告诉我如何让它删除所有的事件吗?“我无法理解。@OmarN我看到的一个问题是,当您删除一个事件时,您会使用I变量移动剩余的项,并在过程中将该项移动到数组的末尾。顺便说一句,这不是一个好的实践,我建议您不要触摸迭代变量,除非必要。第二件事,您将所有剩余的项目移到左边,这样您就可以跳过测试/删除前i+1元素-可以通过将if替换为while来修复。另外,我将重复我在注释中错误地写到的答案之一-if exist=true将始终计算为true,因为exist=true是一个赋值-如果你想让代码正常工作,你会希望在那里得到==而不是=。该方法将在您返回后立即完成并退出。请注意,您发布的解决方案和接受的解决方案的不同之处在于,您的解决方案会删除数据中出现的所有elt,而接受的解决方案只删除第一次出现的elt并立即退出。这可能是好的,也可能是坏的,这取决于你的方法的契约。@JiriTousek,谢谢你指出这一点,你是绝对正确的!尽管如此,似乎即使是我发布的解决方案也只删除了第一次遇到的问题。你能给我一个提示,告诉我如何让它删除所有的事件吗?“我无法理解。@OmarN我看到的一个问题是,当您删除一个事件时,您会使用I变量移动剩余的项,并在过程中将该项移动到数组的末尾。顺便说一句,这不是一个好的实践,我建议您不要触摸迭代变量,除非必要。第二件事,您将所有剩余的项目移到左边,这样您就可以跳过测试/删除前i+1元素-可以通过将if替换为while来修复。另外,我将重复我在注释中错误地写到的答案之一-if exist=true将始终计算为true,因为exist=true是一个赋值-如果你想让代码正常工作,你需要在那里使用==而不是=。如果elt不存在,返回null怎么样?如果elt不存在,写入将自动返回null吗?@Jiri I copy粘贴了他的代码:。无论如何,代码需要remvoed@Rehman呃……是……是我键盘上的一只松鼠,绝对不是我写了这么愚蠢的评论如果elt不存在,返回null如何?如果elt不存在,写入将自动返回null吗?@Jiri I copy粘贴了他的代码:。无论如何,代码需要remvoed@Rehman呃……是……是我键盘上的一只松鼠,绝对不是我写了这么愚蠢的评论谢谢你的帮助!对我来说,这看起来会在未来的两个月内返回elt
for循环,然后在存在for循环时返回null。这不就是它的工作原理吗?在这种情况下,我不理解它如何返回两个东西。它不能同时返回两个返回语句。到达return语句后,代码将离开该方法并返回到调用它的代码(也称为:返回堆栈)。您只能有1个返回值。返回后的任何代码都不会执行。谢谢您的帮助!在我看来,它将在for循环中返回两个elt,然后在for循环存在时返回null。这不就是它的工作原理吗?在这种情况下,我不理解它如何返回两个东西。它不能同时返回两个返回语句。到达return语句后,代码将离开该方法并返回到调用它的代码(也称为:返回堆栈)。您只能有1个返回值。返回后的任何代码都不会执行。