簡體   English   中英

在對數組元素進行排序時某些輸入上的ArrayIndexOutOfBoundExceptions嗎?

[英]ArrayIndexOutOfBoundExceptions on certain inputs when sorting elements of an array?

我的任務是編寫一個重新排列數組的函數,以使奇數出現在數組的開頭(從最大到最小),偶數從最小到最大出現在結尾。 除了標准輸入和輸出流,我們不允許使用任何其他庫。

當數字為時,輸出有效:

{-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];

編輯-這是stacktrace。

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];

我想這就是你想要的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM