簡體   English   中英

嘗試使用 ArrayList 創建冒泡排序的問題<Integer>

[英]Issue trying to create a Bubble Sort using ArrayList<Integer>

嗨,我想弄清楚如何在 Java 中使用 BubbleSort,但我的代碼出錯了,我不知道為什么

import java.util.ArrayList;

public class SortsRunner {

    public static void BubbleSort(ArrayList<Integer> nums) {
        ArrayList<Integer> arr = new ArrayList<Integer>();
        int n = arr.size();
        for (int i = 0; i < n-1; i++) 
            for (int j = 0; j < n-i-1; j++) 
                if (arr.get(j) > arr.get(j+1)) 
                { 

                    int temp = arr.get(j); 
                    arr.get(j) = arr.get(j+1); 
                    arr.get(j+1) = temp; 
                }
        }
    public static void SelectionSort(ArrayList<Integer> nums) {

        }
    public static void printArrayList(ArrayList<Integer> nums) {
        for(int i = 0; i < nums.size(); i++) {
            System.out.println(nums.get(i) + " ");
            }
        System.out.println();
        }
    public static ArrayList<Integer> makeRandomArrayList() {
        ArrayList<Integer> nums = new ArrayList<>();
        for(int i = 0; i < (int)(Math.random() * 11) + 5; i++) {
            nums.add((int)(Math.random() * 100));
            }
        return nums;
        }

public static void main(String[] args) {
printArrayList(makeRandomArrayList());

}

}

當我到達arr.get(j) = arr.get(j+1); arr.get(j+1) = temp; 左側錯誤說“賦值的左側必須是變量”。 誰能幫我解決這個問題?

arr.get(j) = arr.get(j+1);
arr.get(j+1) = temp; 

您正在嘗試為方法調用的結果賦值。

你不能這樣做。 您只能分配給局部變量、當前類中的字段、字段訪問(例如foo.bar = ... )或數組元素(例如foo[0] = ... )。

相反,您應該使用set來更新列表元素:

arr.set(j, arr.get(j+1));
arr.set(j+1, temp);

對於在列表中交換兩個元素的特定情況,您可以改用Collections.swap

Collections.swap(arr, j, j+1);

你做錯了幾件事。

  1. 已經提到的明顯的getset問題。
  2. 您正在對empty list進行排序的事實。 您傳入nums但對您創建的空的進行排序。
  3. 您應該使用boolean來防止不必要的outer loop重復。 可以這樣想,如果您不在外循環的第一次迭代中進行交換,那么您將不會在后續迭代中進行交換。

和一種風格建議。 不要使用loops或沒有{} if statements 即使它們只包含一行代碼。 如果這樣做,您將不太可能犯編碼錯誤。

請嘗試以下操作:

    public static void BubbleSort(List<Integer> nums) {
        int n = nums.size();
        for (int i = 0; i < n; i++) {
            boolean swapped = false;
            for (int j = 0; j < n-1; j++) {
                if (nums.get(j) > nums.get(j + 1)) {
                    int temp = nums.get(j);
                    nums.set(j, nums.get(j + 1));
                    nums.set(j + 1, temp);
                    swapped = true;
                }
            }
            if (!swapped) {
                break;
            }
        }
    }

暫無
暫無

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

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