2016-07-07 2 views
-2

Может кто-нибудь, пожалуйста, объясните мне, почему j < i в цикле.Java For Loop, почему J <I?

for(int i=1; i < 100; i++){ 
    boolean isPrime = true; 

    //check to see if the number is prime 
    for(int j=2; j < i ; j++){ 
     if(i % j == 0){ 
      isPrime = false; 
     } 
    } 

    // print the number 
    if(isPrime) 
     System.out.print(i + " "); 
} 

В i идет во вторую петлю, не i==1?

+2

Да, в первый раз, но не после этого. – JJJ

+0

Ваш вопрос немного неясен: технически это будет работать, если i == 1 второй цикл не будет введен вообще, потому что j Erik

+1

Я не согласен с Юханой. Второй цикл никогда не будет выполнен с i == 1 –

ответ

0

Как я во второй цикл не i == 1?

Ответ на этот вопрос нет.

Условия для цикла в основном являются булевыми. Ваш вложенный для цикла у вас есть

for(int j=2; j < i ; j++)

Это означает, что для этого для петли для выполнения, J должен быть < я.

Если вы положите точку останова на эту строку и пройдите через нее в своем отладчике, это станет для вас намного более очевидным.

Так что я пытаюсь сказать нет, когда i==1, для второго цикла цикла невозможно выполнить, потому что j<i - false.

Так, начиная с самого начала вашего кода, у вас есть

for(int i=1; i < 100; i++){ 
    boolean isPrime = true; 

    //check to see if the number is prime 
    for(int j=2; j < i ; j++){ 
     if(i % j == 0){ 
      isPrime = false; 
     } 
    } 

    // print the number 
    if(isPrime) 
     System.out.print(i + " "); 
} 

Бег с самого начала вы будете иметь i=1. isPrime будет установлен равным true, а затем он проверит, удовлетворяются ли параметры вашего второго цикла.

for(int j=2; j < i ; j++) 

j < i является false, поэтому для контура не будет выполняться. Код будет пропустить его и перейти на ваш, если заявление if(isPrime)

Следующая итерация у вас будет i=2, будет проверяться второй для петли, и видя, что j<i холдинг значения 2 < 2 является false, цикл будет пропущен снова ,

Третья итерация у вас будет i=3. Внутренний цикл будет проверяться на j<i, удерживая значения 2 < 3, которые на этот раз TRUE, поэтому цикл, наконец, будет выполнен.

Надеюсь, это имеет смысл. Как я уже упоминал ранее, если вам все еще неясно, запустите его через ваш отладчик, и он должен стать ясным.

0

Оптимизация, потому что если j > i < =>i % j == i, и никогда == 0.

2

Вы ищете простые числа от 1 до 100. Для каждого номера, я (который идет от 1 до 100), вы хотите, чтобы проверить, есть ли меньше число (к), которые делят его. Меньшее число означает, что j < i.

Что касается первой итерации цикла, то i = 1, поэтому внутренний цикл не будет выполнен, и это нормально, потому что 1 является простым - вам не нужно проверять, делится ли оно меньшими числами.

Смежные вопросы