Ich schreibe ein Programm für Klasse, um die Fähigkeit zu zeigen, die Blasensortierung zu codieren. Ich habe tagelang daran gearbeitet und kann es anscheinend nicht bekommen. Zumindest kompiliert es jetzt, aber löst eine Ausnahme aus.
Ich habe den Teil kommentiert, mit dem ich Probleme habe, das tatsächliche Austauschen der Elemente im Array.Bubble Sort wirft Ausnahme
Das Programm soll ein Array von 20 randoms Ganzzahlen erzeugen, und sortieren Sie sie dann mithilfe der Bubble-Sortierung, Drucken jedes Durchlaufs, wie es geht, bis es abgeschlossen ist.
import java.util.*;
public class BubbleSorting {
public static void bubbleSort(ArrayList<Integer> arr) {
int n = arr.size();
int temp = 0;
for (int i = 0; i < n; i++) {
//this is the chunk of code that I am having problems with
for (int j = i; j < (n-1); j++) {
if (arr.get(n-1) < arr.get(j))
temp = arr.get(j-1);
arr.set(j-1, arr.get(j));
arr.set(j, temp);
}
}
}
private static void printOut(int pass, ArrayList<Integer> array) {
System.out.print("Pass " + pass + ": ");
for (int i = 0; i < array.size() - 1; i++) {
System.out.print(array.get(i) + ", ");
}
System.out.print(array.get(array.size() - 1) + ".");
System.out.println();
}
public static void main(String[] args) {
ArrayList<Integer> array = new ArrayList<Integer>();
Scanner sc = new Scanner(System.in);
String userInput = "";
boolean endLoop = false;
do{
try{
for (int i = 0; i < 20; i++) {
int element = (int)(1000.0 * Math.random());
array.add(element);
}
System.out.print("\nUnsorted Array: ");
//Displays the unsorted ArrayList
for (int i = 0; i < array.size() - 1; i++) {
System.out.print(array.get(i) + ", ");
}
System.out.print(array.get(array.size() - 1) + ".");
System.out.println();
bubbleSort(array);
}
catch (IndexOutOfBoundsException e) {
System.out.println("\nThere is an out of bounds error in the ArrayList.");
}
System.out.print("\nEnter Y to continue or N to quit: ");
userInput = sc.nextLine();
if (userInput.equalsIgnoreCase("Y")) {
endLoop = false;
}
else if (userInput.equalsIgnoreCase("N")) {
endLoop = true;
}
else {
System.out.println("\nYou did not enter Y or N.");
System.out.println("Please try again.");
}
}while(endLoop == false);
}
}
Was ist die Ausnahme? – bejado
Haben Sie versucht, Ihren Debugger zu verwenden? Oder deinem Code von Hand folgen? Was passiert zum Beispiel, wenn Sie Einträge wechseln müssen, wenn "i = j = 0"? –
Wenn i = 0 und j = 0, erhalten Sie index = -1, dessen Index außerhalb der Grenzen liegt. Weil dein ** j ** von ** i ** beginnt. – HappyHal