2016-04-19 8 views
0

Ich schreibe ein Simon Says-Spiel, das verfolgen soll, wie oft der Benutzer die Aufgabe erfolgreich abgeschlossen hat. Der Code wird ausgeführt, die Ausgabe ist jedoch falsch. Die erwartete Ausgabe ist 4, aber mein Code löscht 8.Simon sagt, dass der Counter nicht richtig funktioniert

import java.util.Scanner; 

public class SimonSays 
{ 
    public static void main (String [] args) 
    { 
     String simonPattern = ""; 
     String userPattern = ""; 
     int userScore = 0; 
     int i = 0; 

     userScore = 0; 
     simonPattern = "RRGBRYYBGY"; 
     userPattern = "RRGBBRYBGY"; 

     char s; 
     char u; 

     for (i = 0; i < 10; i++) { 
      s = simonPattern.charAt(i); 
      u = userPattern.charAt(i); 
      if (s == u) 
      { 
       userScore = userScore + 1; 
       continue; 
      } 
     } 

     System.out.println("userScore: " + userScore); 
     return; 
    } 
} 
+1

Dies ist Java - kein Javascript! –

+1

Und warum 4? Wenn 8 Zeichen übereinstimmen? –

+0

Ich entschuldige mich, wenn ich die Sprache falsch identifiziert habe, bin ich neu hier. Wie lautet der richtige Name für diese Code-Sprache? –

Antwort

0

Wie Sie in Ihrer Frage gesagt haben, ist Ausgang 4, aber mein Code löscht 8. Sie möchten, wie viele fortlaufende Zeichen vom Anfang des Strings übereinstimmen.

Es bedeutet, dass Sie die Schleife kurz nach conscative

simonPattern = "RRGBRYYBGY"; 
    userPattern = "RRGBBRYBGY"; //Index 4 have different Characters . 


if (s == u) 
    { 
    userScore = userScore + 1; //add your counter 1 at each time character matched. 
    continue; //directly move to loop control statement. 
    } 

dieses Stück Code prüft, bis das letzte Element in der String und Ihre Zähler wird immer wieder erhöht, bis das letzte Element des Stringbreak wollen.

versuchen Sie diesen Code. arbeiten

if (s != u) 
      { 
      break; //this will break your loop in just after character doesn't matched. 
      } 

     ++userScore; // Increase your counter if matched. 
3

Also gehe ich davon aus Sie die Charaktere durchlaufen und, wenn das erste Mal, wenn die Zeichen nicht übereinstimmen, dann wird prüfen Sie es „failing“ und nur zählen die vorhergehenden Übereinstimmungen.

Also in diesem Fall können Sie

if (s != u) { 
    break; 
} 

aus der Schleife zu brechen verwenden; Ansonsten erhöhen Sie einfach die Anzahl.

Ich mag es nicht, break persönlich zu verwenden, aber würde nur eine Funktion schreiben, um die Anzahl zurückzugeben, wenn die Zeichen nicht übereinstimmen.