for循环中的“ return false”会影响所有方法吗?

时间:2019-06-27 18:35:07

标签: java return

我有一个问题。首先,我想找到1到1000之间的质数,所以我写了一个这样的程序。它运行了,但是我认为for循环中的“ return false”不会影响所有此方法,因为它位于for循环中。但是,它影响了该程序。简而言之,for循环中的“ return false”会影响所有方法还是仅影响for循环?

我尝试删除“ return true”,这会导致错误。相反,当我删除“ return false”时,它并没有引起错误。

public class Main {

  public static boolean primeNumberQuery(int number) {        
    for (int i=2; i <= (number/2); i++) {            
        if ((number % i) == 0) {
            return false; // This line                
        }            
    }       
    return true; // This line        
  }

  public static void main(String[] args) {        
    for (int i=2; i <= 1000; i++) {            
        if (primeNumberQuery(i)) {
            System.out.println(i);                
        }                
     }        
  }     
}

6 个答案:

答案 0 :(得分:4)

是的,return不仅会退出primeNumberQuery(),还会退出整个方法for-loop。您只需使用break即可退出循环。

答案 1 :(得分:2)

这个成语叫“早归”。如果一个数字可以被i整除,则可以立即从该方法返回false,而无需继续遍历其他数字。

答案 2 :(得分:1)

据我了解,您是在问为什么“ return false”会退出该方法,而不是像您尝试的那样将您踢出for循环。

在不具有null返回类型的方法中,“ return ____”将始终在返回后返回任何值,并且该方法的执行将结束。如果要尝试循环的下一个迭代,则应使用“继续”。如果要在检查条件变为假之前结束循环,则应使用“ break”。

返回类型为的方法必须至少具有一个总是可以被命中的return语句。在您的代码中,删除“ return true”将导致编译错误,因为“ return false”处于未必一定为true的条件之后,因此可能无法达到该行。删除“ return false”很好(至少对于编译而言),因为可以可靠地命中“ return true”。希望这是有道理的。

答案 3 :(得分:1)

该术语似乎很奇怪。 return语句不会“影响”程序。只是您执行或不执行的一些代码;在这方面,它与其他任何声明都没有什么不同。

“ return”语句的操作是终止其所在方法的执行,并(如果该方法返回一个值)提供该方法的返回值。

要求,如果将某个方法定义为返回值(在您的情况下为“布尔”),则通过该方法的所有可能路径最终都以“返回”结尾,该返回返回指定类型的值。

在您的情况下,如果提供的数字不是素数,则将执行指示的“ return false”,即找到除数为0的除数。否则,您将退出循环。编译器错误消息告诉您,代码中的每个路径都必须返回一个值。

在'number'为质数的情况下,不执行for循环将导致精确的除法(余数为0),因此您将永远不会执行“ return false”。您将退出循环并执行下面的任何代码。最终,以下代码需要返回布尔值,因为这是方法的定义方式。因此,通过以下代码的所有可能路径都需要执行显式的“返回”。

答案 4 :(得分:0)

没有数学上清晰的方法可以预测函数是否退出循环。因此,您必须涵盖该功能的所有退出情况。

返回在功能级别起作用。一旦执行一次,就退出功能(并固有地循环),并且功能内不会执行其他任何操作。

答案 5 :(得分:0)

对于(int i = 2; i <=(number / 2); i ++)

如果您看此问题,如果您的数字整数以2开头且2/2为1,而i以2开头,那么此for循环不起作用吗?因为2 <= 2/2是不正确的。我是这个网站的新手,所以我只是想知道。