2017-02-10 4 views
-3

Ich habe einen 2D-Array aus diesem Format (Matrix) erhalten:Swapping oder beweglichen Elemente eines 2D-Array

String[][] start; 
start = new String[4][4]; 

Eingang

d d + + 
a d d + 
a b b c 
+ b _ d 

Output

d d + + 
a d d + 
a b b c 
+ _ b d 

Ziel ist es, den Unterstrich zu tauschen/verschieben/verschieben ("_") um das Array herum, außer dass ich nicht mit einem "+" Zeichen tauschen kann. Ich kann nur mit den Buchstaben tauschen.

Ich versuche, andere Zeichen Positionen mit dem "_" zu tauschen, aber sie nicht zu ersetzen. Ich versuche, diese Operation in einer Schleife auftreten zu lassen

Ich weiß nicht, wie das geht. Ich wäre dankbar für irgendwelche Vorschläge.

Ich änderte den Zustand des Arrays durch Austauschen von "_" mit "b" in der letzten Zeile. Dies ist jetzt ein neues Array, das ich mit dem Ausgangszustand vergleichen kann. Ich muss den neuen Zustand in einem anderen Array speichern, um einen Vergleich mit dem Ausgangszustand zu erstellen.

+0

Wenn Sie nur Zeichen verwenden, schlage ich vor, 'char [] [] start' zu verwenden. –

+0

Was sind die Vorteile der Verwendung von char over string in diesem Fall? @ RenéScheibe –

+0

Weil 'char' deine Eingabe besser beschreibt. Weitere Informationen finden Sie unter http://stackoverflow.com/questions/10430043/difference-between-char-and-string-in-java. –

Antwort

1

können Sie zwei Schleifen verwenden, da Sie 2d Array und ein verwenden, wenn zu überprüfen, ob Ihr Wert gleich _ oder nicht Sie diese verwenden können:

public static void main(String[] args) { 
    String[][] start = {{"d", "d", "+", "+"}, {"a", "d", "d", "+"}, {"a", "b", "b", "c"}, {"", "a", "_", "d"}}; 
    for (int i = 0; i < start.length; i++) { 
     for (int j = 0; j < start[i].length; j++) { 
      System.out.print(start[i][j] + " "); 
      //here you should to check if your index is > 0 
      if (j > 0) { 
       //here you make your swapping if your attribute = to _ 
       //and the previews value is not equal to + like you said in your question 
       if (start[i][j].equals("_") && !start[i][j-1].equals("+")) { 
        String x = start[i][j - 1]; 
        start[i][j - 1] = "_"; 
        start[i][j] = x; 
       } 
      } 

     } 
     System.out.println(); 
    } 

    //print your result 
    for (int i = 0; i < start.length; i++) { 
     for (int j = 0; j < start[i].length; j++) { 
      System.out.print(start[i][j] + " "); 
     } 
     System.out.println(); 
    } 
} 

Das Ergebnis ist:

d d + + 
a d d + 
a b b c 
+ _ b d 
+0

danke @YCF_L Ich fand das sehr hilfreich. –

+0

Sie sind herzlich willkommen @the_fro :) –

0

Nicht sicher, was genau Sie meinen, indem Sie tauschen und sich bewegen. Aber Ihr Array ist im Grunde nur ein Raster aus Speicher. Sie können einer Zelle nur einen neuen Wert zuweisen. Sie können Werte nicht verschieben. Wenn Sie etwas anderes als das Zuweisen tun möchten, müssen Sie diese Operation erstellen. Wie beim Verschieben könnte das der neuen Zelle den Wert zuweisen und der alten Zelle null zuweisen. Swapping benötigt in den meisten Fällen eine temporäre Variable.

+0

um den Unterstrich mit anderen Buchstaben in der Matrix zu tauschen kann ich eine Methode dafür schreiben? Ich verstehe, dass ich eine temporäre Variable brauche. –

0

Da Ihre Frage nicht klar ist, was erwarten Sie nach dem Austausch "_" mit anderen alphabetischen Zeichenfolgen. Ich gebe ein Skelett-Programm, das für Sie arbeiten kann.

String[][] start = new String[4][4]; 

for (int row = 0; row < start.length; row++) { 
    for (int column = 0; column < start[row].length; column++) { 
     if (start[row][column].equals("_")) { 
      // you can swap character "_" with other alphabets 
     } 
    } 
} 

Um zu überprüfen, ob eine Zeichenfolge nur Alphabete enthält oder nicht, können Sie Folgendes verwenden.

if (start[row][column].matches("[a-zA-Z]+")) { 
    // string contains only alphabets, now you do what you want to do 
} 

Insbesondere müssen Sie durch jede Zeile und Spalte der Matrix gehen und prüfen, ob eine Zeichenfolge nur Buchstaben oder Unterstrich enthält. Dann können Sie einen Austausch vornehmen, aber vorsichtig mit den Indizes umgehen, während Sie auf ein Element der Matrix zugreifen.