2016-06-13 3 views
0

Ich arbeite am Minesweeper-Spiel, und alles sah gut aus, genau bis zum gestrigen Morgen: Ich habe ein Problem, das ich selbst nicht lösen kann. Die Situation sieht wie folgt aus: Ich habe 2 zweidimensionale Arrays, in einem i Sweeper Feld mit allen erzeugten Werte generiert haben, wo 9 Mittel bombardieren, und 0 bedeutet Freiraum. Lass es uns anrufen Feld. Es ist ein Integer-Array. Grundsätzlich ist es 9x9 Feld. Es hat +1 Reihe von Nullen als Rahmen für eine ordnungsgemäße Arbeit des Codes. Andernfalls wird OutOfBoundsError zurückgegeben, wenn Code unten aufgeführt wird. Beispiel:Java - Gibt falsche Werte zurück, während mit mehrdimensionalen Arrays gearbeitet wird

00000000000 0 
00000019100 1 
01110011100 2 
02910000000 3 
09321110000 4 
02911910000 5 
01111111110 6 
01110112910 7 
02920192110 8 
02920111000 9 
01110000000 10 
00000000000 11 

Meine zweite Array ist String-Array user_field und es ist leer (alle null Feld mit . ersetzt), hier durch Befehle Benutzer Eingabe . Felder öffnen.

........... 1 
........... 2 
........... 3 
........... 4 
........... 5 
........... 6 
........... 7 
........... 8 
........... 9 
........... 10 
........... 11 
........... 12 

Es muss Ausgang mich beim Start alle 0 von Feld, und alle Werte um sie herum. Beispiel:

nnn 1 
n0n 2 
nnn 3 

Ich benutze diesen Code zu nennen:

 for (int i = 1; i < field_h-2; i++) { 
      for (int j = 1; j < field_w-2; j++) { 
       if (user_field[i][j]==null) { 
        user_field[i][j]="."; 
       } 
       if(field[i][j]==0) { 
        for(int k = 0; k< 3; k++) { 
         for (int n = 0; n< 3; n++) { 
          user_field[i-1+k][j-1+n] = String.valueOf(field[i-1+k][j-1+n]); 
          //System.out.print(String.valueOf(field[i-1+k][j-1+n])); 
         } 
        } 
       } 
       System.out.print(user_field[i][j]); 
      } 
      System.out.println(" "+ (i)); 
     } 

Aber in Wirklichkeit gibt er (n -Mittel Wert, x -Mittel nichts.):

xxx 1 
x0n 2 
nnn 3 

Ich habe keine Ideen, warum das passiert. Kann mir bitte jemand helfen? Ich bin in Java nicht so erfahren, vielleicht verstehe ich etwas nicht.

+0

Es wäre einfacher, Ihnen zu helfen, wenn Sie eine [mcve] zur Verfügung stellen würden. –

+0

Auch ist es nicht klar, was Ihr Kommentar bedeutet - aber Sie können Ihren Beitrag bearbeiten, wenn er nicht sagt, was Sie wollten ... –

Antwort

0

Ich werde das Problem nur unter Berücksichtigung der zweiten Zeile (die, die x0n ist) erklären, aber meine Überlegungen gelten natürlich für die vorherige und nächste Zeile.

Ihr Programm tut dies:

  1. Ursprünglich user_field ist xxx und field ist n0n (lassen Sie uns sagen, es ist 102).

  2. Sie betrachten das erste Element von field. Es ist 1, und als solches ist es nicht 0, so dass Sie keine Änderungen an user_field vornehmen. Dann druckst du sofort das erste Element user_field aus, das zu diesem Zeitpunkt noch x ist. So weit hast du x gedruckt.

  3. Sie bewegen sich zum zweiten Element von field. Es ist Null, also aktualisieren Sie das erste und dritte Element von user_field. Aber an diesem Punkt haben Sie bereits das erste Element user_field gedruckt. Jetzt field ist 102, user_field ist 102, aber Sie haben bereits x gedruckt.Jetzt drucken Sie das zweite Element user_field, so dass Sie x0 drucken.

  4. Sie bewegen sich zum dritten Element von field. Es ist nicht 0, so dass Sie keine Änderungen vornehmen. Sie drucken das dritte Element von user_field, das zu dieser Zeit 2 ist, so dass Sie x02 drucken, während die gewünschte Ausgabe 102 ist.

Um es zu beheben, teilen Sie Ihre Schleife in zwei. In der ersten Schleife berechnen user_field, und in der zweiten Schleife drucken Sie es. Etwas in der Art von:

for (int i = 1; i < field_h-2; i++) { 
     for (int j = 1; j < field_w-2; j++) { 
      if (user_field[i][j]==null) { 
       user_field[i][j]="."; 
      } 
      if(field[i][j]==0) { 
       for(int k = 0; k< 3; k++) { 
        for (int n = 0; n< 3; n++) { 
         user_field[i-1+k][j-1+n] = String.valueOf(field[i-1+k][j-1+n]); 
         //System.out.print(String.valueOf(field[i-1+k][j-1+n])); 
        } 
       } 
      } 
     } 
    } 

    for (int i = 1; i < field_h-2; i++) { 
     for (int j = 1; j < field_w-2; j++) { 
      System.out.print(user_field[i][j]); 
     } 
     System.out.println(" "+ (i)); 
    } 
+0

Vielen Dank! Arbeitete perfekt. Viel Glück! –