Mit y<=i/2 tauschst du bei einer ungeraden Anzahl von Arrayelementen (=geradzahliges i) den mittleren Eintrag mit sich selbst. Das ist nicht falsch, aber unnötig. Das Minimum an Vertauschungen kriegst du mit y < (i+1)/2.
neuling96
for( int y=0; y<=i/2; y++)
neuling96
so müsste es gehen?
public static void turn(int i){
for( int y=0; y<i/2; y++){
int temp=a[y];
a[y]= a[i-y];
a[i-y]= temp;
}
}
eulerscheZahl
Die Musterlösung und dein Code machen fast das selbe.
MIt einem Unterschied: for( int y=0; y<= (i+1)/2; y++){
y geht zu weit, weshalb du bei ungeradem i die innersten Elemente doppelt tauschst.
Bsp.: i = 3
y = 0, 1, 2 wird getauscht mit 3, 2, 1, also erst 1<->2 und dann 2<->1.
Daher ist die Musterlösung korrekt, deine jedoch nicht.
neuling96
In Lösung fehler?
Ich glaube die Lösung scheint nicht so zu stimmen??
bei b hätte ich einen einwand
public void turn(int i){
for( int y=0; y<= (i+1)/2; y++){
int temp=a[y];
a[y]= a[i-y];
a[i-y]= temp;
}
}
neuling96 hat diese Bilder (verkleinerte Versionen) angehängt: