#java #arrays #boolean
#java #массивы #логическое
Вопрос:
У меня возникли проблемы с логическим методом, я хочу проверить, является ли весь массив четным, нечетным или ни тем, ни другим. Я ввожу размер массива и значения массива, однако метод «isArrayEven» продолжает выводить «все числа в массиве четные», даже если мой массив должен быть 1,2,3, а isArrayEven должен быть false.
import java.util.Scanner;
public class OddOrEven {
public static boolean isArrayEven(int[] arrayValues, int arraySize){
for(int i = 0; i <= arraySize -1; i )
{
if(arrayValues[i] % 2 == 0)
{
return true;
}
}
return false;
}
public static boolean isArrayOdd(int[] arrayValues, int arraySize){
for(int i = 0 ; i < arraySize ; i )
{
if(arrayValues[i] % 2 == 1)
{
return true;
}
}
return false;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int arraySize = scan.nextInt();
int[] arrayValues = new int[arraySize];
for(int i = 0; i <= arraySize-1; i )
{
arrayValues[i] = scan.nextInt();
}
if(isArrayEven(arrayValues,arraySize) == true)
{
System.out.println("all numbers in array is even");
}else if(isArrayOdd(arrayValues,arraySize) == true)
{
System.out.println("all numbers in arrat is odd");
}else if(isArrayEven(arrayValues,arraySize) == false amp;amp; isArrayOdd(arrayValues,arraySize) == false)
{
System.out.println("both have even and odd");
}
}
}
Я
Комментарии:
1. Вам нужно инвертировать логические операторы проверки и
return false
если проверка пройдена. например, когда значение нечетное, вы должны напрямую возвращать false в методе isArrayEven.
Ответ №1:
Вы возвращаетесь слишком рано. Вам нужно немного перевернуть и изменить свои if-операторы. Взгляните на это:
public static boolean isArrayEven(int[] arrayValues, int arraySize){
for(int i = 0; i <= arraySize -1; i )
{
if(arrayValues[i] % 2 != 0)
{
return false;
}
}
return true;
}
public static boolean isArrayOdd(int[] arrayValues, int arraySize){
for(int i = 0 ; i < arraySize ; i )
{
if(arrayValues[i] % 2 == 0)
{
return false;
}
}
return true;
}
Здесь я немного изменил операторы if.
В isArrayEven
методе я возвращаюсь false
при первом появлении нечетного числа. Если odd
число не встречается, я возвращаю true
.
В isArrayOdd
методе я возвращаюсь false
при первом появлении четного числа. Если четного числа не встречается, я возвращаюсь true
.
Ответ №2:
Мне кажется, что ваши тесты и возвращаемые значения должны быть инвертированы. Теперь вы вернете «весь массив четный»= true, когда найдете только одно четное число. Вы должны проверять все значения или возвращать false, когда найдете какое-либо значение, которое не является четным в функции «является четным».
В общем, я бы предположил, что было бы лучше выполнить итерацию вашего массива один раз и инициализировать два bools перед итерацией; например. «all_are_odd» и «all_are_even» и инициализировать их значением true;
Затем просто повторите полный массив один раз и установите для all_are_x значение false только в том случае, если вы встретите значение, которое не соответствует all_are_x.
Вы могли бы оптимизировать, выйдя из цикла, как только оба all_are_odd / all_are_even будут false.
После этой итерации теперь вы можете выводить, являются ли все четными, все нечетными или что-то среднее.
Крайний случай — это, конечно, пустое множество.
Ответ №3:
ваша ошибка в том, что вы возвращаете true или false всякий раз, когда находите четное или нечетное число. Это означает, что, допустим, у вас есть массив целых чисел [2, 1, 3, 5]
. Когда ваш метод isEven выполняется для этого массива, он возвращает true , но 1-е, 2-е и 3-е значения массива нечетны. То, что вам нужно сделать, противоположно тому, что вы делаете прямо сейчас.
public boolean isEven(int arr[]){
for(int i=0; i<arr.length; i)
if(arr[i]%2 !=0) return false;
return true;
}
Ответ №4:
Вы должны отправить false, если найдете нечетное число в массиве, и вернуть true, если все элементы в массиве четные.
public static boolean isArrayEven(int[] arrayValues, int arraySize){
for(int i = 0; i <= arraySize -1; i ) {
if(arrayValues[i] % 2 != 0) { // if found an odd number
return false;
}
}
return true; // if not found any odd number means all number is even
}
Ответ №5:
Я отчасти согласен с Ричардом в том, что вам нужны некоторые логические переменные, но я бы выбрал другой подход:
логическое значение содержит семь = false; логическое значение содержит SODD = false;
Перебирайте все элементы в массиве, и как только вы найдете четное число, измените первое логическое значение на true. Аналогично, измените второе логическое значение на true, как только будет найдено нечетное число. Вы могли бы даже рассмотреть возможность досрочного прерывания цикла, если оба логических значения станут истинными, поскольку при проверке остальной части массива больше нечему будет учиться.
Затем используйте эти логические значения в вашем блоке if / else.