Я хочу, чтобы этот код разделял четные и нечетные числа

#java #arrays

#java — язык #массивы #java

Вопрос:

Он печатает все четные числа, но печатает только нечетные числа 13 и 11. Не 3 или 5. Кто-нибудь знает, что я делаю не так? Заранее спасибо.

открытый класс ReadjustingArray { public static void main (строка[] аргументов){

     int[]A={13,3,4,6,8,5,10,11};
    int temp=0;

    for (int i=0; i< A.length; i  ){

        if (A[i] % 2 ==0){
            temp=A[i];
            A[i-1] = A[i];
            temp=A[i];
            System.out.print(A[i]   " ");
        }

    }
    for (int j=0; j< A.length; j  ){
        if (A[j] % 2 !=0){
            System.out.print(A[j]   " ");
        }
    }     
}   
  

}

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

1. После завершения вашего первого цикла A выглядит следующим образом [13, 4, 6, 8, 8, 10, 10, 11]. Чего вы пытаетесь достичь в первом цикле?

2. У вас также есть возможная ошибка индекса: если первый элемент массива A изменен на четное число, первое условие будет истинным и A[i-1] выйдет за рамки.

Ответ №1:

Не изменяйте массив с помощью вашего первого цикла, тогда ваш второй цикл будет работать так, как вы ожидаете. В качестве альтернативы, в Java 8 вы могли бы использовать IntStream и filter подобные

 int[] A = { 13, 3, 4, 6, 8, 5, 10, 11 };
IntStream.of(A).filter(x -> x % 2 == 0)
        .forEachOrdered(x -> System.out.printf("%d ", x));
IntStream.of(A).filter(x -> x % 2 != 0)
        .forEachOrdered(x -> System.out.printf("%d ", x));
System.out.println(); // <-- Adds a new line (and an implicit flush)
  

Ответ №2:

это может вам помочь.

 public static void main(String[] args) {
int[] A = { 13, 3, 4, 6, 8, 5, 10, 11 };

for (int i : A) {
        if (isEven(i)) {
            System.out.println(i   " is even");
        } else {
            System.out.println(i   " is odd");
        }
    }
}

static boolean isEven(int number) {
    if ((number % 2) == 0) {
        return true;
    }
    return false;
}
  

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

1. зачем вам создавать функцию для 1-liner? return (number % 2) == 0;

2. для удобства чтения и понимания кода вы можете заменить метод isEven в качестве примера методом isPrime

Ответ №3:

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