循环。为什么会这样?质数

时间:2018-06-17 08:04:13

标签: numbers

当我将System.out.println("Looping: " + i);放在for in方法的开头时,我在理解循环方面遇到了问题。

它循环三次,比平时更多,例如13号,它说:

Looping: 2 , Looping: 2, Looping 3. 

但是,如果我将System.out.println("Looping: " + i);放在for in方法的末尾,则会显示:

Looping 2, Loopin 3

这对我的理解更准确。

为什么会这样?

public static void main(String[] args) {


    int counter = 0;
    for(int i=1; i <= 10; i++){
      if(isPrime(i)){
          System.out.println("The number: " + i + " is a prime number");
          counter++;
      }

      if(counter==3){
          break;
      }

}

public static boolean isPrime(int n){
    if(n == 1){
        return false;
    }

    for(int i=2; i <= (long) Math.sqrt(n); i++){
        System.out.println("Looping: " + i);
        if(n%i == 0){
            return false;
        }


}

    return true;
}

1 个答案:

答案 0 :(得分:0)

我们来看看这段代码:

  public static boolean isPrime(int n){
    if(n == 1){
      return false;
    }

    for(int i=2; i <= (long) Math.sqrt(n); i++){
      System.out.println("Looping: " + i); // first
      if(n%i == 0){
        return false;
      }

      System.out.println("Looping2: " + i); // second
    }

    return true;
  }

它的输出是:

Looping: 2
Looping: 2
Looping2: 2

如您所见,第一个System.out.println执行了2次而第二个只执行了一次。这是因为

if(n%i == 0){
  return false;
}

如果n%i == 0提供true,则方法将return falsefor loop停止执行。这就解释了为什么放置System.out.println的位置会有所不同。

您将获得更多有用的信息here