2015-11-03 1 views
1

Je crée un jeu de morpion et je suis tombé sur un problème avec mes chaînesChaîne Initialiser

code:

import java.util.Scanner; 

public class TicTacToe { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 

     String player1Letter; 
     String player2Letter; 

     System.out.print("Player 1 Name: "); 
     String player1 = input.next(); 
     System.out.print('\f'); 

     System.out.print("Player 2 Name: "); 
     String player2 = input.next(); 
     System.out.print('\f'); 

     System.out.print(player1 + ", Choose X or O: "); 
     String letter = input.next(); 

     if (letter.equalsIgnoreCase("x")) { 
      player1Letter = "X"; 
     } else { 
      player2Letter = "O"; 
     } 

     if (letter.equalsIgnoreCase("o")) { 
      player1Letter = "O"; 
     } else { 
      player2Letter = "X"; 
     } 

     System.out.print('\f'); 
     System.out.println("How To"); 
     System.out.println("-------"); 
     System.out.println(); 
     System.out.println(" 1 | 2 | 3 "); 
     System.out.println("-----------"); 
     System.out.println(" 4 | 5 | 6 "); 
     System.out.println("-----------"); 
     System.out.println(" 7 | 8 | 9 "); 
     System.out.println(); 

     while (true) { 
      System.out.print("Type 'begin' To Begin: "); 
      String begin = input.next(); 
      if (begin.equalsIgnoreCase("begin")) { 
       break; 
      } else if (!begin.equals("begin")) { 
       System.out.print('\f'); 
       System.out.println("Incorrect Syntax"); 
       System.out.println(); 
      } 
     } 
     System.out.println(player1 + "'s Turn " + player1Letter); 
     System.out.println("-----------------------------------"); 
     System.out.println(); 
     System.out.println(" | | "); 
     System.out.println("-----------"); 
     System.out.println(" | | "); 
     System.out.println("-----------"); 
     System.out.println(" | | "); 
    } 
} 

Vers le bas où il est dit

System.out.println(player1 + "'s Turn " + player1Letter); 

I obtenir l'erreur disant "variable player1Letter n'a peut-être pas été initialisé". J'ai créé les chaînes en dehors des instructions if et les ai initialisées à l'intérieur de l'instruction if. Maintenant, je l'appelle, je ne peux pas comprendre ce qui ne va pas ici. Je vous remercie!

Répondre

3

changer votre code d'initialisation comme ceci:

if (letter.equalsIgnoreCase("x")) { 
    player1Letter = "X"; 
    player2Letter = "O"; 
} else { 
    player1Letter = "O"; 
    player2Letter = "X"; 
} 

donc vous initialiser les deux variables toujours

+0

Cela fonctionnera, mais il convient de noter, par exemple, que si "z" ou "abat-jour" est entré, alors ce dernier cas est exécuté même si l'invite demande X ou O. – Monkeygrinder

2

Ce message vous indique qu'il existe au moins un chemin dans le code où la variable n'est pas initialisée avant sa première utilisation. Cette analyse d'attribution définitive élimine l'une des causes les plus fréquentes d'erreurs dans d'autres langues.

Dans ce cas, si letter est égal à "x" ou "o", alors player1Letter ne sera pas initialisé.

Vous pouvez résoudre ce problème en vous assurant que player1Letter et player2Letter sont toujours initialisés avant leur premier accès. Une façon de le faire est:

boolean isPlayer1X = letter.equalsIgnoreCase("x"); 
String player1Letter = isPlayer1X ? "X" : "O"; 
String player2Letter = isPlayer1X ? "O" : "X"; 
0

Essayez ceci:

player2Letter = "O"; 
player1Letter = "X"; 
if (letter.equalsIgnoreCase("x")) { 
    player2Letter = "X"; 
    player1Letter = "O"; 
} 
2

Vous initialisez une chaîne d'un côté d'un if mais pas de l'autre. Vous devez initialiser une chaîne sur des deux côtés du mêmeif pour que le compilateur puisse être certain que la chaîne a été initialisée.

L'option la plus simple serait d'initialiser les deux chaînes au moment de la déclaration.

0

Vous initialisez la chaîne dans un corps if. Lisez attentivement l'erreur. L'instruction if peut ne pas être vraie toutes les fois. donc, pour vous assurer que votre variable est toujours initialisée, initialisez-la en dehors de la condition if. Espérons que cela aide :)