[英]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);
你做錯了幾件事。
get
和set
問題。empty list
進行排序的事實。 您傳入nums
但對您創建的空的進行排序。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.