Hi, ich hänge mit einem Kumpel seit Stunden an einer Aufgabe für den Informatikunterricht. Wir sollen ein zufällig befühltes Array sortieren, und dass nach verschiedenen Sortierverfahren (selection sort/insertion sort/etc.). Ich hab jetzt einen Code der (glaube ich) funktionieren wird, jedoch wird bei einer while-Schleife ein java.lang.ArrayIndexOutOfBoundsException-Fehler.
Der Fehler liegt in Zeile 96. Gerne auch Verbesserungen für den restlichen Code ^^, und bedenkt bitte, ich bin ein Code-Noobie. LG
Der Fehler liegt in Zeile 96. Gerne auch Verbesserungen für den restlichen Code ^^, und bedenkt bitte, ich bin ein Code-Noobie. LG
Java:
/**
*
* Beschreibung
*
* @version 1.0 vom 06.10.2022
* @author
*/
public class Sortierverfahren {
public static void main(String[] args) {
int arrayanzahl = 50;
long zeit = System.currentTimeMillis(), zeit1;
int[] original, feld;
original = new int[arrayanzahl];
feld = new int[arrayanzahl];
original = befuelleArray(original);
feld = kopiereArray(original, feld);
System.out.println("UNSORTIERTES ZAHLENFELD");
ausgabeArray(feld);
zeit1 = System.currentTimeMillis()-zeit;
zeit = System.currentTimeMillis();
System.out.println("Benötigte Zeit in ms: " + zeit1);
System.out.println(" ");
selectionSort(feld);
zeit1 = System.currentTimeMillis()-zeit;
zeit = System.currentTimeMillis();
System.out.println("Dafür benötigte Zeit in ms: " + zeit1);
System.out.println(" ");
insertionSort(feld);
zeit1 = System.currentTimeMillis()-zeit;
zeit = System.currentTimeMillis();
System.out.println("Dafür benötigt Zeit in ms: " + zeit1);
System.out.println(" ");
} // end of main
public static int[] befuelleArray(int[] zahlen) { //hier wird das Array "original" befühlt
int length = zahlen.length;
for (int i = 0;i<length ;i++ ) {
zahlen[i] = (int)(Math.random()*100);
} // end of for
return zahlen;
} // end of befuelleArray
public static int[] kopiereArray(int[] gegeben, int[] kopiert) { //hier wird "feld" definiert
int length = gegeben.length;
for (int i = 0;i<length ;i++ ) {
kopiert[i] = gegeben[i];
} // end of for
return kopiert;
} //end of kopiereArray
public static void ausgabeArray(int[] druck) { // hier wird "feld" ausgegeben
for (int i = 0;i<druck.length ;i++ ) {
System.out.print(druck[i] + " ");
} // end of for
System.out.println("");
System.out.println("");
} // end of ausgabeArray
public static int[] tauschen(int[] zahlen, int pos1, int pos2) { //hier wird eine Position mit der anderen getauscht. HÄUFIG GENUTZT !NEU KONTROLLIEREN!
int speicher;
speicher = zahlen[pos1];
zahlen[pos1] = zahlen[pos2];
zahlen[pos2] = speicher;
return zahlen;
} // end of tauschen
public static void selectionSort(int[] zahlen) {
int links = 0;
int min = 0;
while (links<zahlen.length) {
min = links;
int i = links;
while (i < zahlen.length) {
if (zahlen[i]<=zahlen[min]) {
min = i;
} else {
} // end of if-else
i++;
} // end of while
tauschen(zahlen, min, links);
links++;
i = 0;
} // end of while
System.out.println("Sortiertes Zahlenfeld nach Selection-Sort-Verfahren:");
ausgabeArray(zahlen);
} // end of selectionSort
public static void insertionSort(int[] zahlen) {
int rechts = 1, links = rechts-1;
while (rechts<=zahlen.length) {
int i = 0;
while (i <= rechts-1) {
if (zahlen[rechts]<=zahlen[i]) { //LAUT JAVA IST HIER DER FEHLER...
tauschen(zahlen, rechts, i);
} // end of if
i++;
} // end of while
rechts++;
} // end of while
ausgabeArray(zahlen);
} // end of insertionSort
} // end of class Sortierverfahren