2015-11-08 3 views
1

Это может быть глупый вопрос, но я в замешательстве.Java для цикла с условием не увеличивая

У меня есть цикл for, который исключает заданную итерацию (случайное число). Это работает для любого случайного числа, выбранного, что это больше 0. Однако, если это ноль, он никогда не делает ни одной итерации:

int x; 
for (x = 0; ((x < 2) && (x != r)); x++) { 
    // do something if (x != r) 

} 
System.out.println("X : " + x); 

Для примера, что он не работает, г = 0. Не означает ли это, что он должен пропустить первую итерацию, но второй?

Вышеприведенный println дает «X: 0».

Любая помощь? Благодаря!

+0

Он никогда не делает ни одной итерации, потому что требует 'х! = Г 'в то время как ваш' x' сначала установлен в 0, как ваш 'r', заставляя ваше условие возвращать' false' и не вводить петлю – SomethingSomething

+0

Из-за условия (x <2) && (x! = r). При r = 0 условие терпит неудачу и не войдет в цикл. – Shriram

+0

Нет, второе выражение используется для завершения цикла. Если выражение оценивается как false, выйдите из цикла: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html – BLaZuRE

ответ

5

Если вы хотите пропустить первую итерацию, вы должны переместить условие x != r внутри цикла. Если условие x != r в условии цикла означает, что цикл никогда не будет введен, если оба значения r и x инициализированы до 0, так как цикл завершается, когда условие цикла становится ложным.

for (x = 0; x < 2; x++) { 
    if (x != r) { 
    // do something if (x != r) 
    } 
} 
+0

Переменная r выбирается случайным образом, поэтому она может быть не всегда первой итерацией. Но если предположить, что всегда 0, почему бы не работать так, как я писал выше? – tj56

+0

@ tj56 Я добавил объяснение. Если условие цикла является ложным, цикл завершается. Если перед первой итерацией она ложна, цикл никогда не вводится. – Eran

0
for (initialization; termination condition; increment) { 
    statement(s) 
} 

Приведенный выше код будет работать:

initialization 
    termination condition 
    statement 
    increment 

    termination condition 
    statement 
    increment 

    termination condition 
    statement 
    increment 

    .... 

Таким образом, вы должны удалить условие x != r, потому что перед запуском заявление на первый раз, убедитесь, что состояние и вернуть ложь.

Следует отметить, что. без условия x != r, ваш цикл запускается только дважды: x = 0 и x = 1. Возможно, в вашем коде эти значения (0 и 1) не выдают никакого значения.

0

Я думаю, что было бы здорово, если бы вы разместили (г> = 0) генерация случайных чисел затем будет определена непосредственно от 0.

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