# Array



## Siisii92 (20. Feb 2022)

was ist hier falsch in meinem Code?


```
public class KLAUSUR19 {
    public static void main(String [] args) {
        
        int[] feld= {1,7,13,-5,2,27,11,4,51};
        umkehr(feld);
        
        
        
    }
    
public static void umkehr(int[] feld) {
        
        

int tmp=0;
int k=feld.length-1;
assert(feld !=null);

if(feld.length%2 ==0) {
    for(int i=0;i<feld.length/2;i++) {
        
        tmp=feld[i];
        feld[i]=feld[k];
        feld[k]=tmp;
        
        k--;
        System.out.print(feld[i]+" ");
    }
}
else
    if(feld.length%2 !=0) {
    for(int i=0;i<feld.length+1/2;i++) {
        tmp=feld[i];
        feld[i]=feld[k];
        feld[k]=tmp;
        k--;
        System.out.print(feld[i]+" ");
    }
    }





    }
    }
```


----------



## temi (20. Feb 2022)

Du solltest den Code besser einrücken oder hast du noch eine Frage?

Ah, Frage gesehen 

Was geht denn nicht?


----------



## Siisii92 (20. Feb 2022)

Dies ist meine Programmausgabe und sollte nicht so sein, aber ich weiß nicht,was hab ich falsch gemacht


----------



## temi (20. Feb 2022)

Siisii92 hat gesagt.:


> aber ich weiß nicht,was hab ich falsch gemacht


Die Unterscheidung, ob gerade Anzahl oder nicht ist eigentlich nicht notwendig, aber hier:`i<feld.length+1/2` gilt Punkt vor Strich.

Den Index "von hinter her" kannst du auch einfach berechnen: Länge - 1 - i, was aber auf das gleiche rauskommt.


----------



## Siisii92 (20. Feb 2022)

[CODE lang="java" title="es ist immer noch falsch"]else
    if(feld.length%2 !=0) {
    for(int i=0;i<(feld.length+1)/2;i++) {
        tmp=feld_;
        feld=feld[k];
        feld[k]=tmp;
        k--;
        System.out.print(feld+" ");
    }
    }
[/CODE]_


----------



## temi (20. Feb 2022)

Die Ausgabe sollte nicht in der Methode stattfinden. Da die nur bis zur Hälfte des Feldes läuft, wird auch nur die Hälfte ausgegeben.

Nimm stattdessen in der main(): `System.out.println(Arrays.toString(feld));`


----------



## Siisii92 (20. Feb 2022)

ich hab die Ausgabe in der Methode gelöscht.


----------



## temi (20. Feb 2022)

temi hat gesagt.:


> Nimm stattdessen in der main(): `System.out.println(Arrays.toString(feld));`


https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#toString(int[])


----------



## temi (20. Feb 2022)

Nebenbei noch:

```
public static void umkehr(int[] feld) {
    int tmp=0;
    int k=feld.length-1; // hier wird es bereits zu einer NullpointerException kommen
    assert(feld !=null); // dies wird nicht mehr erreicht
```


----------



## Jw456 (20. Feb 2022)

Siisii92 hat gesagt.:


> Dies ist meine Programmausgabe und sollte nicht so sein, aber ich weiß nicht,was hab ich falsch gemachtAnhang anzeigen 17637


bei ungerade  musst du eins abziehen nicht plus
"for(int i=0;i<feld.length+1/2;i++) {"

wenn du 9 elemente hast wie oft musst du tauschen?   4 mal
in der mitte musst du nichts machen .

was machst du

9 elemente + 1 = 10  durch zwei ist 5 mal tauschen.  Ist Falsch du brauchst nur 4 mal tauschen.



```
for(int i=0;i<(feld.length-1)/2;i++) {
```
bei ungerade


----------



## Jw456 (20. Feb 2022)

```
public class KLAUSUR19 {
    public static void main(String[] args) {

        int[] feld = {1, 7, 13, -5, 2, 27, 11, 4, 51};
        System.out.println(Arrays.toString(feld));

        umkehr(feld);
        System.out.println(Arrays.toString(feld));
    }

    public static void umkehr(int[] feld) {
        assert (feld != null);
        int tmp = 0;
        int k = feld.length - 1;
        int count;

        if (feld.length % 2 == 0) {
            count = feld.length / 2;
        } else {
            count = (feld.length - 1) / 2;
        }

        for (int i = 0; i < count; i++) {
            tmp = feld[i];
            feld[i] = feld[k];
            feld[k] = tmp;
            k--;
        }
    }
}
```


----------



## Jw456 (20. Feb 2022)

Wie auch schon gesagt wurde brauchst du die Unterscheidung nach Gerade oder ungerade nicht machen.
Denn bei einer Ganzzahldivision kommt bei 9 durch 2 auch nur 4 als Ergebnis raus.

Habe es nur zur Verdeutlichung in dem Code mitgenommen.


----------

