#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!";