#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:
Нет необходимости изменять массив. Просто выведите коэффициенты таким же образом, как вы печатаете четные. Используйте их соответствующую сравнительную логику.