2017-02-20 21 views
0

Я создал цикл while, который принимает значение пользователя b и проверяет наличие двух условий. Хотя я получил свой код правильно, я изначально пытался сделать это с помощью одного цикла while, сочетающего два условия, но это не сработало. Мой инкремент i ++ либо считается один раз, либо петли навсегда в зависимости от того, где я его помещал.Использование одиночного цикла while против времени, а если комбинация

Есть ли способ, которым это могло бы работать с использованием оператора while, сочетающего условия?

Не работает

 //Declare variables 
     int i = 0 ;   //Counter Variable. 
     int positive = 0 ; //Holds the result of our positive sum. 

     while ((i < b) && (i % 10 == 0)) //While i is less than the users number. 

      { 

       positive = i ; 
       System.out.println (positive) ; 
       i++ ; //Incrementer 

      } 

Это Работает

 //Declare variables 
     int i = 0 ;   //Counter Variable. 
     int positive = 0 ; //Holds the result of our positive sum. 

     while (i < b) //While i is less than the users number. 

      { 

       if (i % 10 == 0) 

        { 

         positive = i ; 
         System.out.println (positive) ; 

        } 

       i++ ; 
      } 
+0

Что вы на самом деле пытаетесь достичь? т. е. каков ваш ожидаемый результат для данного ввода? –

+0

Что такое значение 'b' –

+1

Нет, потому что это две отдельные вещи. Один из них представляет собой цикл для прохождения диапазона чисел, а другой - для печати. Если вы их объедините, он просто остановится, как только одно из условий не будет работать, как вы это пережили. – AntonH

ответ

1
while ((i < b) && (i % 10 == 0)) 

цикл будет выполняться только один раз, потому что, как только в качестве значения я изменяется от 0 до 1 из-за инкрементора

(i % 10 == 0) will fail. 

если в

while (i < b) 

код проверки, если я меньше б или нет, и

, если (я 10% == 0)

становится обрабатываться как отдельное условие.

+0

О, я вижу, я предположил, что он будет повторять условие, поэтому в первом он разбивает мой цикл и возвращает 0 мне. Он не прерывается во втором коде, потому что он просто подсчитывает от 0 до 99 и на каждой итерации он проверяет. – Ninja2k

0

Эти два фрагмента кода не эквивалентны, и вы не можете действительно сделать их эквивалент. В вашем первом блоке кода ваш комментарий учитывает первое условие, но не второе. У вас есть два условия. Оба из них должны быть верными для продолжения цикла. Как только одно из этих условий ложно, цикл прекращается. Итак, как только i % 10 == 0 вернет false, цикл завершается.

Однако, вы также можете решить эту проблему, увеличив i на 10 в каждом цикле. Таким образом, вы могли бы что-то подобное, и он будет производить тот же вывод:

int i = 0 ; 
int positive = 0 ; 
while (i < b){ 
    positive = i; 
    System.out.println (positive) ; 
    i += 10; 
} 
+0

будет еще проще с циклом 'for'. 'for (int i = 0; i

+0

Кроме того, это на самом деле неправильно, 'positive' всегда будет 0, просто используйте' i' –

+0

Да, конечно, это лучше, чем для но он спросил о том, в какие циклы специально, поэтому я использовал это. Я не знаю, что вы имеете в виду со вторым комментарием. Он увеличивается. – Neatname