Или условие в Java для цикла

#java #for-loop

#java #для цикла

Вопрос:

Итак, у меня довольно простая проблема, и я понятия не имею, почему она терпит неудачу. Я знаю, как это исправить, используя другой подход, но я просто хотел понять, почему это вызывает эту проблему.

 static String kangaroo(int x1, int v1, int x2, int v2) {
   int last = (x1 < x2) ? x1 : x2;
   int first = (x1 > x2) ? x1 : x2;

   for(; x1 <= 2 || x2 < 100;){
       System.out.println(x1   " "   x2);
       if(x1 != x2){
           x1  = v1;
           x2  = v2;
       } else if (x1 == x2){
           return "YES";
       }
   }
   return "NO";

   }
  

Что это делает, так это то, что, хотя условие x1 <= 2 было выполнено, цикл продолжает выполняться. Почему, когда я указал, это либо это условие, либо другое, которое останавливает цикл?

Комментарии:

1. Какие фактические значения для x1 и x2 вы видите?

2. (0,2,5,3) в таком порядке x1 — 0, x2 — 5

3. Итак, x1 = 0 и x2 = 2? Или что?

4. Независимо от того, x2 меньше 100 (все эти значения равны), поэтому условие цикла выполняется, и оно продолжается. Для остановки вам нужно условие FALSE.

5. @Kidusasmareyele, я полагаю, что я предоставил более прямой ответ с подробным объяснением того, почему это работает лучше всего. Пожалуйста, просмотрите и рассмотрите это как принятый ответ.

Ответ №1:

Что это делает, так это то, что, хотя условие x1 <= 2 было выполнено, цикл продолжает выполняться.

Вы думаете об этом неправильно. Пока условие истинно, цикл будет продолжать выполняться. Если вы хотите, чтобы оно прервалось, условие должно завершиться ошибкой. Подумайте о наиболее распространенном примере цикла for :

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

 for(int i = 0; i < 10; i  ) {
   System.out.println("i = "  i);
}
  

Комментарии:

1. Хорошо, я понимаю вашу точку зрения, но разве условие больше не выполняется, потому что x1 больше 2?

2. Ну, у вас есть условие ИЛИ. Является ли x2 <100 по-прежнему истинным? Если это так, то условие все еще выполняется.

Ответ №2:

У вас почти получилось … но не совсем. Похоже, вы на самом деле ищете while loop . Цикл while выполняет код внутри скобок до тех пор, пока не будет выполнено определенное условие.

Вот пример цикла while:

 while(true) {
   System.out.println("I will run forever!");
}
  

Вы можете использовать это для выполнения кода до тех пор, пока не будет выполнено условие. Вот пример:

 int x = 3;
while(x < 100) {
   System.out.println("x is less than 100. Adding 3");
   
   x  = 3;
}
System.out.println("If this line of code is executed, x should be greater than 100!");
  

Мы можем применить это к вашему коду, выполнив цикл while до x1 == x2 .

 //If x1 does not equal x2, run this code forever!
while(x1 != x2){
   x1  = v1;
   x2  = v2;
}
System.out.println("If we made it here, x1 == x2");
  

Однако возможно, что x1 и x2 никогда не будут равны друг другу! Давайте применим те условия завершения, которые вы указали (это: if x1 is <= 2, stop and return "NO!" и if x2 is <= 100, stop and return "NO!" )

 while(x1 != x2) {
   //Terminating Conditions
   if(x1 <= 2 || x2 <= 100) {
      return "NO";
   }

   //If we made it here, we know x1 is > 2 and x2 is > 100

    x1  = v1;
    x2  = v2;
}
//If we made it here, x1 == x2
return "YES!";