#java
#java
Вопрос:
Я пытался написать код, в котором все 0 будут перемещены вправо от массива. Я просто использовал левый и правый указатели.
public class Solution {
public int[] moveZero(int[] array) {
// Write your solution here
if (array.length==0) {
return array;
}
int left=0;
int right=array.length-1;
while (left<=right) {
if (array[left]!=0) {
left =1;
}
if (array[right]==0) {
right-=1;
} else {
int temp = array[left];
array[left] = array[right];
array[right] = temp;
left =1;
right-=1;
}
}
return array;
}
}
Я знаю, что здесь я должен использовать if / else if вместо if / if, вот почему у меня есть индекс из связанной ошибки. Но я не понимаю, почему? Если у меня есть оператор if / if, какая разница, что это делает, а не использование if / else if в этом вопросе?
Комментарии:
1.
if
/else
означает, что может выполняться только одна ветвь; если есть два отдельныхif
оператора, то оба их блока могут выполняться (если оба условия верны).
Ответ №1:
if (condition1) {
a();
} else if (condition2) {
b();
} else {
c();
}
означает то же самое, что
if (condition1) {
a();
} else {
if (condition2) {
b();
} else {
c();
}
}
So else if
— это просто сокращение для else
с if
внутренним.
Чтобы понять, почему ваш код выдает an ArrayIndexOutOfBoundsException
, самый простой способ — пошаговое выполнение кода в отладчике (обратитесь к документации вашей среды разработки, чтобы узнать, как это сделать).
В качестве альтернативы вы можете притвориться, что вы компьютер, и выполнить программу с помощью ручки и бумаги, чтобы выяснить, где ваша программа выходит из строя. Однако использовать отладчик проще, если вы знаете, как им пользоваться.
Ответ №2:
Я не думаю, что есть какая-либо причина использовать if /else вместо if / if, у них обоих есть свое место. В операторе if / if, если второй if
оператор полагается на то, что предыдущий равен false, его следует преобразовать в оператор if / else . Если else
оператор в операторе if / else не имеет ничего общего с if
оператором перед ним, то его следует преобразовать в два отдельных оператора if.
В качестве примера, когда следует использовать оператор if / else (для выполнения того же, что и ваш):
public class Solution {
public int[] moveZero(int[] inputArray) {
int[] outputArray = new int[inputArray.length];
int left = 0;
int right = inputArray.length - 1;
for (int num : inputArray) {
if (num == 0) {
outputArray[right] = num;
right --;
} else {
outputArray[left] = num;
left ;
}
}
return outputArray;
}
}