2017-02-02 15 views
-4

Ich schrieb ein einfaches Kartenspiel Pairs. Grundsätzlich wählt der Spieler 2 Karten 1 auf einmal und sieht, ob sie übereinstimmen. Wenn sie übereinstimmen, bleiben die 2 gewählten Karten offen, wenn sie nicht übereinstimmen, werden die 2 gewählten Karten wieder in die verdeckte Position zurückgesetzt. Jetzt möchte ich das Spiel automatisch gespielt werden, wenn es ein bekanntes Paar gibt, spiele das Paar; Wenn es eine bekannte Karte gibt, die mit der ersten zufällig ausgewählten Karte übereinstimmt, klappen Sie diese Karte um. Sonst Flip zufällig. Ich erhalte den Fehler variable might not have been initializedJava-Fehlervariable wurde möglicherweise nicht initialisiert

PlayCard.java:133: error: variable Num1 might not have been initialized 
       g.flip(Num1); 
        ^
PlayCard.java:143: error: variable Num1 might not have been initialized 
          if (g.cardArray[i].value == g.cardArray[Num1-1].value){ 
                    ^
PlayCard.java:152: error: variable Num1 might not have been initialized 
         }while (Num2 == Num1 || g.cardArray[Num2-1].flipped == true); 
             ^
PlayCard.java:155: error: variable Num2 might not have been initialized 
       g.flip(Num2); 
        ^
PlayCard.java:164: error: variable Num1 might not have been initialized 
       g.cardArray[Num1-1].flipped = false; 
          ^
PlayCard.java:166: error: variable Num2 might not have been initialized 
       g.cardArray[Num2-1].flipped = false; 
          ^
6 errors 

Hier ist mein Code für diese spezielle Methode ...

public static int playGood(MatchCardGame g){ 
    int gameSize = g.n; 
    long seed = System.currentTimeMillis(); 
    Random rand = new Random(seed); 
    int Num1, Num2; 

    while (!g.gameOver()){ 

     // during even number of flipCounts 
     if (g.getFlips()%2 == 0){ 

      // if there's a known pair, flip the pair 
      for (Card card : g.cardArray){ 
       if (card.valueKnown == true){ 
        for (int i = 0; i < gameSize; i++){ 
         if (g.cardArray[i] == g.cardArray[i+1]){ 
          Num1 = i; 
          Num2 = i + 1; 
         }else{ 
          for (int j = i+2; j < gameSize-2; j++){ 
           if (g.cardArray[i] == g.cardArray[j]){ 
            Num1 = i; 
            Num2 = j; 
           } 
          } 
         } 
        } 
       }else{ 
         // if no pair, flip a random valid card 
         do{ 
          Num1 = rand.nextInt(gameSize)+1; 
         }while (g.cardArray[Num1-1].flipped == true); 
        } 
      } 
      g.flip(Num1); 
     } 

     // during odd number of flipCounts 
     if (g.getFlips()%2 != 0){ 

      // if there's a known value matches the first card, flip that card 
      for (Card card : g.cardArray){ 
       if (card.valueKnown == true){ 
        for (int i = 0; i < gameSize; i++){ 
         if (g.cardArray[i].value == g.cardArray[Num1-1].value){ 
          Num2 = i; 
         } 
        } 
       }else{ 

        // if no known value matches card1, flip a random card 
        do { 
         Num2 = rand.nextInt(gameSize)+1; 
        }while (Num2 == Num1 || g.cardArray[Num2-1].flipped == true); 
       } 
      } 
      g.flip(Num2); 
     } 

     // compare two cards, if match, cards remain flipped 
     g.wasMatch(); 
     if (g.wasMatch() == true){}else{ 

      // if mismatch, cards revert back to unflipped, and store the value as known 
      g.flipMismatch(); 
      g.cardArray[Num1-1].flipped = false; 
      g.cardArray[Num1-1].valueKnown = true; 
      g.cardArray[Num2-1].flipped = false; 
      g.cardArray[Num2-1].valueKnown = true; 
     } 
    } 
    return g.getFlips(); 
} 
+0

'int Num1 = 0 verwendet wird; int Num2 = 0; 'Versuchen Sie mit diesem – Gatusko

+2

lokalen Variablen in Java (zB: 'int Num1;') sollte vor der Verwendung initialisiert werden. Sie haben keinen Standardwert/Müllwert wie andere Programmiersprachen möglicherweise –

+0

initialisieren Sie Ihre 'num1' und' num2' auf '0', bevor Sie sie in Ihrer' while (! g.gameOver()) 'Schleife verwenden. Versuchen Sie Folgendes: 'int Num1 = 0, Num2 = 0'; – Chip

Antwort

0

Java ist diese Werte zu wissen, nicht in der Lage sind, in Ihrer if-Anweisung gesetzt, so werden Sie müssen sie auf einen Wert initialisieren. Eine gute Möglichkeit, sicherzustellen, dass der Code wie erwartet funktioniert, besteht darin, sie auf einen Dummy-Wert zu setzen und dann zu überprüfen, ob sie korrekt auf etwas anderes gesetzt sind. Zum Beispiel:

int Num1, Num2 = -1; 

dann vor ihnen überprüfen sie wurden auf einen gültigen Wert> = 0

Verwandte Themen