Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich soll in einer Aufgabe Array-Elemente miteinander vertauschen. Dazu hab ich erstmal eine Frage ..
Der Quelltext:
Java:
class Harrei{
public static void main(String[]args){
String ausgabe = "";
int feld[]= new int [52];
for(int i = 0; i < feld.length; i++){
feld[i]=(int) Math.pow(i,4);
}
for(int i = 0; i < feld.length -1; i++){
int b = feld[50];
feld[50] = feld[0];
feld[0] = b;
ausgabe = i + " hoch 4 = " + feld[i];
System.out.println(ausgabe);
}
}
}
Ich sollte in der Aufgabe ein Array der Länge 50 erstellen. Hat alles gut geklappt, bis ich die vertauschen musste. Dann musste ich das Array auf 52 erhöhen und unten in der Schleife 1 abziehen. Gibts auch eine andere Lösung?
Mein Hauptproblem ist aber: Wie kann ich das Array so umsortieren, dass die 50 an der 1. Position stehen, die 49. an der 2. Position usw... also keine Rückwärtsausgabe, sondern das umsortieren der Werte innerhalb des Arrays. Da steh ich völlig auf dem Schlauch
Temporäres Array klingt gut, aber eine Variable müsste auch reichen. Du tauschst einfach den ersten mit dem letzten Teil des Arrays bzw. den zweiten Teil mit dem zweitletzten und so weiter...
Dafür musst du nur den ersten oder letzten Wert jeweils in einer Variable speichern und der andere überschreibt den gespeicherten.
Wäre in Pseudo-Code etwa:
Java:
int array[] = new int[50]
int temp;
for(int zaehler; zaehler = array.length()/2; zaehler-1)
temp = array[array.length()-zaehler];
array[array.length()-zaehler] = array[array.length()+zaehler];
array[array.length()+zaehler] = temp;
}
Find ich zumindest ne schicke Art das zu bearbeiten
Ay da hat sich ein Fehler eingeschlichen in meiner Anweisung.
Java:
int array[] = new int[50]
int temp;
for(int zaehler = array.length()/2; zaehler >= 0; zaehler-1)
temp = array[array.length()/2-zaehler];
array[array.length()/2-zaehler] = array[array.length()/2+zaehler];
array[array.length()/2+zaehler] = temp;
}
Ich starte von der Mitte des Arrays und vergleiche dann immer die äußersten, noch nicht vertauschten Elemente damit.
Bspw:
Ein Array mit 8 Elementen.
Zaehler somit 4;
Array mit der Füllung am Anfang:
1 2 3 4 5 6 7 8
Nach 1. Durchlauf :
Zaehler ist 3;
8 2 3 4 5 6 7 1
Nach 2. Durchlauf:
Zaehler ist 2;
8 7 3 4 5 6 2 1
Nach 3. Durchlauf:
Zaehler ist 1;
8 7 6 4 5 3 2 1
Nach 4. Durchlauf:
Zaehler ist 0;
8 7 6 5 4 3 2 1
Bricht ab. Fertig.
Diese Methode über eine normale temporäre Variable ist in diesem Fall etwas ressourcen-schonender, da du nur ein int-feld brauchst, das unabhängig ist. Im Falle eines temporären Arrays musst du halt die Größe dieses ermitteln und hast mehr als ein Feld für die Werte.
Ich finde den Code nicht sehr leserlich. Rein geschmacklich präferiere ich z.B. Folgendes:
Java:
public void swap(int a[], int x, int y){
int tmp = a[x];
a[x] = a[y];
a[y] = tmp;
}
public void reverse(int a[]){
for(int i = 0, j = a.length-1; i < j; i++,j-- ){
swap(a, i, j);
}
}