# Hilfe bei Array mit Shakersort gesucht



## deadahead90 (10. Jan 2016)

Hi Leute,

ein Kumpel und ich ich haben die Aufgabe, ein Array zu erstellen mit zufälligen Zahlen und dieses dann mit dem Shakersort sortieren zu lassen. Beim compilieren kommen allerdings 2 Fehler heraus, wir vermuten, dass diese mit der Deklaration der Klasse zusammenhängen, doch wissen einfach keine Lösung dafür. Wir sind beide noch Anfänger, was das Programmieren mit Java angeht.
Villeicht kann uns ja Jemand weiterhelfen, vielen Dank schonmal im Voraus  .


```
import java.util.Random;

public class Shakersort {   // öffentliche klasse => Deklarieren des Shakersort

   public int[] intArr = z[p];                 // public, damit es auch im Nachfolgenden Teil verwendet werden kann
   int k;                           // int Variable, die mit dem Array oben verknüpft ist

   public void Zufallszahlen (String[] args) {         // öffentliche Deklaration der Zufallszahlen, damit diese auch unten verwendet werden können
     int[] z = new int[10];                 // neues Array mit Feldgröße 10
     for (int p = 0; p < 10; p++) {             // Zählvariable p, gleichzeitig auch Begrenzung
       z[p] = (int)(Math.random() * 100 + 1);       // Zufallszahlen erzeugen
     }
   }  

   public int[] sort() {                   // Sortierfunktion wird deklariert und später beschrieben
     int i = 0, l = intArr.length;             // weiter int Variablen, i als Zählvariable und l als Begrenzung, bzw. länge des obigen Arrays
     while (i < l) {                     // i zählt solange hoch, bis es noch kleiner als l ist
       shaker1(i, l);                   // shaker 1 wird erstellt, l zählt runter
       l--;   
       shaker2(i, l);                   // shaker 2 wird erstellt und läuft gegen shaker 1, da i hochgezählt wird
       i++;
     }
     return intArr;                     // Anweisung, um das Array weiter zu benutzen, auch außerhalb der Deklaration "sort"
   }

   private void shaker1(int i, int l) {           // untere Klasse um shaker 1 zu konkretisieren, bzw. ihm eine Funktion zu geben
     for (int j = i; j < l - 1; j++) {           // j als neue Zählvariable, da i nichtg nocheinmal verwendet werden darf, allerdings meint ja dasselbe wie i, j wird hochgezählt
       if (intArr[j] > intArr[j + 1]) {   ´       // if-Bedingung, dass das Array in Abhängigkeit von j größer sein muss, als das Array von j+1
         k = intArr[j];                 // k wird ein Wert zugewiesen
         intArr[j] = intArr[j + 1];           // Gleichsetzen der Arrayabhängigkeiten
         intArr[j + 1] = k;               // Ersetzen der einen Abhängigkeit durch die oben zugeführte Variable k
       }
     }
   }

   private void shaker2(int i, int l) {           // untere Klasse, dieses mal um shaker 2 zu konkretisieren, bzw. diesem eine Funktion zu geben
     for (int j = l - 1; j >= i; j--) {           // wie oben, jedoch wird dieses mal runtergezählt, also von der anderen Richtung durchlaufen
       if (intArr[j] > intArr[j + 1]) {         // if-Bedingung, dass das Array in Abhängigkeit von j größer sein muss, als das Array von j+1
         k = intArr[j];                 // k wird ein Wert zugewiesen
         intArr[j] = intArr[j + 1];           // Gleichsetzen der Arrayabhängigkeiten
         intArr[j + 1] = k;               // Ersetzen der einen Abhängigkeit durch die oben zugeführte Variable k, selbes Vorgehen wie oben, jedoch von anderer Seite
       }
     }
   }

   public static void main(String[] args) {         // jetzt erst Hauptmethode, um die obigen Ereignisse anzuzeugen
     Shakersort ss = new Shakersort();           // neuer Shakersort
     int[] arr = ss.sort();                 // neues int abhängigkeits Array erstellent
     for (int i = 0; i < arr.length; i++) {     // for-Schleife, um hochzuzählen, bzw. um Nummern vor die Sortierten Zahlen zu schreiben
       System.out.println(i + 1 + ": " + arr[i]);     // Ausgabe der Ergebnisse, sortiert und nummeriert
     }
   }
}
```


----------



## strußi (12. Jan 2016)

was ist die Fehlermeldung?
die Posten, dann kann euch geholfen werden


----------



## strußi (12. Jan 2016)

ich hätte das so angefangen
klasse
int[] z =new int[ 10];
zufallszahl(); //setzt in z die zufallszahlen
sort();
shakeUp( int lowerBound, int upperBound);
shakeDown( int lowerBound, int upperBound);
und main( String[] args); zum starten

oder ihr sucht einfach mal im netz
http://javabeginners.de/Algorithmen/Sortieralgorithmen/Shakersort.php


----------



## Joose (12. Jan 2016)

Euer Fehler kommt von dieser Zeile:


```
public int[] intArr = z[p];                 // public, damit es auch im Nachfolgenden Teil verwendet werden kann

   public void Zufallszahlen (String[] args) {         // öffentliche Deklaration der Zufallszahlen, damit diese auch unten verwendet werden können
     int[] z = new int[10];                 // neues Array mit Feldgröße 10
     for (int p = 0; p < 10; p++) {             // Zählvariable p, gleichzeitig auch Begrenzung
       z[p] = (int)(Math.random() * 100 + 1);       // Zufallszahlen erzeugen
     }
   }
```

Das Problem: In der Methode "Zufallszahlen" deklariert ihr ein lokales int Array und füllt diese mits Zufallszahlen. (das kompiliert aber noch).
Was euch den Fehler bringt ist das ihr dann "z[p]" einfach so außerhalb dieser Methode verwenden wollt als Initialwert für die Instanzvariable "intArr"

Fehler 1: z[p] wäre in diesem Zusammenhang ein einfacher int Wert und kann daher keiner Variable vom Typ int[] zugewiesen werden
Fehler 2: Die Variable "z" und die Variable "p" sind an dieser Stelle nicht bekannt (da es lokale Variablen der Methode bzw. der Schleife in der Methode sind).


----------

