В текущем коде есть много неправильных вещей.
- Вы возвращаете
true
для каждого отдельного случая. - Вы создаете переменную
result
и никогда не делаетеничего с ним. - Вы создаете три цикла, когда можете использовать только один.
- Вы никогда не проверяете, находятся ли значения рядом друг с другом.
Для первой проблемы мы будем return true
только , когда 1, 2, 3
расположены рядом друг с другом, и return false;
для КАЖДОГО другого случая.Это делается с помощью return false;
после цикла.
Для следующей проблемы result
не требуется, вам фактически не нужно ничего считать, поэтому удалите это.
Длятретья проблема, объединить все петли в один цикл.Однако нам нужно будет выполнить цикл с условием nums.length - 2
вместо length
, потому что мы будем сравнивать 3 значения одновременно, и мы не хотим получать ArrayOutOfBoundsException
.
Наконец, чтобы проверить, все ли значения находятся рядом друг с другом, просто сравните значения текущего индекса массива, следующего и двух значений индекса с 1, 2 и 3 соответственно.
Этобудет выглядеть как if (nums[i] == 1 && nums[i + 1] == 2 && nums[i + 2] == 3)
.Если это условие true
, мы немедленно return true
.
Вот как будет выглядеть код со всеми этими исправлениями:
public static void main(String[] args) {
// test cases
int [] arr = {1, 1 ,2, 1, 2, 3};
System.out.println(arrayOneTwoThree(arr));
int [] arr2 = {3, 2, 3};
System.out.println(arrayOneTwoThree(arr2));
}
public static boolean arrayOneTwoThree(int[] nums) {
for(int i = 0; i < nums.length - 2; i++) {
if(nums[i] == 1 && nums[i + 1] == 2 && nums[i + 2] == 3){
return true;
}
}
return false;
}
Тестовые прогоны:
true
false
Примечание: Удалите static
из arrayOneTwoThree(int [] nums)
, если вам нужно его использоватьв контексте non-static
я использовал static
, чтобы проверить его из моего main
.