2016-04-07 19 views
0

Ich möchte Elemente in einer Zeile in einer Matrix grundsätzlich invers tauschen. Zum Beispiel, wenn es sich um eine Zeile in einer int-Matrix:Elemente in einer Zeile in einer Matrix spiegeln

--*---*- 

Dann, wenn es umgekehrt wäre es ausgetauscht wird:

-*---*-- 

Ich würde tun müssen, um dies zu Werten, die gleich "sind * "in einer Matrix Das ist was ich habe. Ich bin mir nicht einmal sicher, ob es funktionieren wird, und ich bekomme auch eine Ausnahme außerhalb der Grenzen. Diese Matrix "image" ist eine String-Matrix.

public void flipHorizontal(){ 
    for (int i=0; i<image.length; i++){ 
     for (int j=0; j<image[i].length; j++){ 
      if (image[i][j].equals("*")){ 
       if(j<(image[i].length-1)/2){ 
        image[i][(image.length-1)-(image[i].length)-j]="*"; 
        image[i][j]="-"; 
       } 
       else 
        image[i][(image[i].length-1)-j]="*"; 
        image[i][j]="-"; 

      } 

     } 

    } 
} 
+0

Ihr Beispiel ist unklar. Willst du jedes einzelne Element in der Reihe tauschen, d. H. Einfach die ganze Reihe umkehren oder einfach die Positionen aller '*' s umkehren? Geben Sie ein Beispiel für eine andere Zeile wie 'AB * CDE * F'. – rgamber

Antwort

0

Die Zeile, die den Fehler zu verursachen scheint, ist die Leitung 6:

image[i][(image.length - 1) - (image[i].length) - j] = "*";

Ich sehe nicht, warum Sie diese Nummer benötigen: (image.length - 1). Es ist wie viele Zeilen es gibt, und ich sehe nicht, warum das für das Umdrehen einer einzelnen Zeile nützlich ist.

Auch durchlaufen Ihre Schleifen von 0 bis image.length (oder image[i].length), was Ihnen eine weitere Iteration als Sie benötigen, da eine Länge von 4 Indizes von 0 bis 3 und nicht 0 bis 4 haben wird Um dies zu beheben, iterieren Sie einfach von 0 bis `image.length

Verwandte Themen