gpt4 book ai didi

java - 对数组元素进行排序时某些输入上的 ArrayIndexOutOfBoundExceptions?

转载 作者:行者123 更新时间:2023-11-30 07:56:41 26 4
gpt4 key购买 nike

我的任务是编写一个函数来重新排列数组,以便奇数从大到小出现在数组的开头,偶数从最小到最大出现在数组的末尾。除了标准输入和输出流之外,我们不允许使用任何其他库。

当数字为:时输出有效:

{-15, 450, 6, -9, 54}

但是如果我将元素更改为:

{-55, 45, 6, 11, 54}

出现异常错误。这是我的代码:

public class ary1 {
public static void sort(int A[], int n) {
int tmp;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (A[0] % 2 == 0) //even
{
if (A[i] < A[j]) {
tmp = A[i];
A[i] = A[j];
A[j] = tmp;
}
} else {
if (A[i] > A[j]) {
tmp = A[i];
A[i] = A[j];
A[j] = tmp;
}
}
}
}
}

public static void showAray(int A[], int n) {
for (int i = 0; i < n; i++) {
System.out.println(A[i]);
}
}

public static void main(String args[]) {
int array1[] = {-55, 45, 6, 11, 54};
int odd = 0;
int even = 0;

for (int i = 0; i < array1.length; i++) {
if (array1[i] % 2 == 0) {
even++;
} else {
odd++;
}
}

int[] array2 = new int[even];
int[] array3 = new int[odd];

for (int i = 0, j = 0, k = 0; i < array1.length; i++) {
if (array1[i] % 2 == 0) {
array2[j++] = array1[i];
} else {
array3[k++] = array1[i];
}
}

System.out.println("Original array:\n");
showAray(array1, array1.length);

sort(array2, even);
sort(array3, odd);

for (int i = 1; i < array1.length; i++) {
if (i < odd) {
array1[i] = array3[i];
} else {
array1[i] = array2[(i + 1) - even];
}
}

System.out.println("\nAfter sorting:\n");
showAray(array1, array1.length);
}
}

我知道这里有一个逻辑错误,但我不知道到底是什么。有没有办法改变逻辑以处理所有整数?谢谢。

array1[i] = array2[(i + 1) - even];

编辑 - 这是堆栈跟踪。

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at ary.main(arytest.java:67)
Java Result: 1

最佳答案

改变这个

array1[i] = array2[(i + 1) - even];

array1[i] = array2[i - odd];

我想这就是你想要的

关于java - 对数组元素进行排序时某些输入上的 ArrayIndexOutOfBoundExceptions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32579423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com