簡體   English   中英

Java:未排序的數組到降序的數組

[英]Java: Unsorted Array to Descending Sorted Array

我是一個學習Java的初學者,我正嘗試將數組中的變量按降序傳輸到另一個數組。 這是我的代碼:

    int num[] = new int[6];
    int DecSort[] = new int[6];
    System.out.println("Input 6 numbers: ");
    for (int i = 0; i < 6; i++) {
        num[i] = Integer.parseInt(br.readLine());
    }
    //sorted array is descending
    int max = num[0];
    int maxpos = 0;
    for (int j = 0; j < 6; j++) {
        for (int i = 0; i < 6; i++) {
            if (num[i] > max) {
                max = num[i];
                maxpos = i;
            }
        }
        DecSort[j] = max;
        max = num[0];
        num[maxpos] = Integer.MIN_VALUE;
    }

    System.out.println("sorted array");
    for (int i = 0; i < 6; i++) {
        System.out.println(DecSort[i]);
    }

當我輸入213、45、1234、765、23、5作為數組時,它輸出:排序后的數組1234765213213213213213

我不確定我的錯誤在哪里,請幫忙!

問題是您正在將max初始化為num[0] 這意味着將永遠找不到數組中小於第一個的任何數字,因為num[i] > max始終為false 您可以通過將max的初始值設置為Integer.MIN_VALUE來修復它。

但是,您知道Java標准庫已經具有排序功能。 您可以使用它以升序對數組進行排序,然后以相反的方式打印它:

int num[] = new int[6];
System.out.println("Input 6 numbers: ");
for (int i = 0; i < 6; i++) {
    num[i] = Integer.parseInt(br.readLine());
}

Arrays.sort(num);

System.out.println("sorted array");
for (int i = 5; i >= 0; --i) {
    System.out.println(num[i]);
}

如果需要的話,我將讓您研究如何將升序數組轉換為降序數組。 ;)


另外,使用NavigableSet ,您甚至可以獲取Java對其進行即時排序:

NavigableSet<Integer> nums = new TreeSet<>();
System.out.println("Input 6 numbers: ");
for (int i = 0; i < 6; i++) {
    nums.add(Integer.valueOf(br.readLine()));
}

Integer[] sortedNums = nums.descendingSet().toArray(new Integer[6]);

我只更改了一些代碼:

1-刪除了DecSort數組,因為不需要它。

2-應用氣泡排序降序算法。

3-將中斷條件更改為for ,以便用於任何大小的數組。

看一看:

public void orderDescending() {
    int num[] = { 213, 45, 1234, 765, 23, 5 };
    // sorted array is descending
    int maxpos = 0;
    for (int j = 0; j < num.length; j++) {
        for (int i = j; i < num.length - 1; i++) {
            if (num[i] > num[j]) {
                int tempA = num[i];
                num[i] = num[j];
                num[j] = tempA;
            }
        }
    }

    System.out.println("sorted array");
    for (int i = 0; i < 6; i++) {
        System.out.println(num[i]);
    }
}

只需進行一些更改即可完美工作!

可以創建比較器,並且可以控制您的升序和降序。

Comparator<Integer> comparator = new Comparator<Integer>() {

        @Override
        public int compare(Integer o1, Integer o2) {
            return o2.compareTo(o1);
        }
    };

    // option 1
    Integer[] array = new Integer[] { 1, 24, 4, 4, 345 };
    Arrays.sort(array, comparator);

暫無
暫無

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

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