Variável não foi inicializada

to criando um programa que simula um jogo de 21, e um método de uma classe é retornar a carta como String, segue o código da carta As.

String comoString() {

    String carta;
    [color=blue]if [/color] (numero == 1) {               //carta As
        String cartaDesenho = "Ás de ";
      [color=blue]  if[/color] (naipe == 1) {
            String naipeString = "ouro";
            System.out.println(cartaDesenho + naipeString);
            carta = cartaDesenho + naipeString;
        } [color=blue]else if[/color] (naipe == 2) {
            String naipeString = "espada";
            System.out.println(cartaDesenho + naipeString);
            carta = cartaDesenho + naipeString;
        } [color=blue]else if[/color] (naipe == 3) {
            String naipeString = "copas";
            System.out.println(cartaDesenho + naipeString);
            carta = cartaDesenho + naipeString;
        }[color=blue] else if[/color] (naipe == 4) {
            String naipeString = "paus";
            System.out.println(cartaDesenho + naipeString);
            carta = cartaDesenho + naipeString;
        }

[color=blue]return[/color] carta;
}

o netBeans fala que a variável carta não foi inicializada, pq? ela nao deveria assumir o valor de um desses if ou else if??

Ele te diz que não foi inicializada porque o compilador não tem como saber se pode existir alguma condição que não atende nenhum dos if’s que você escreveu.

Se houver uma condição que não entre em nenhum if, seu método vai retornar null, e por isso mesmo o compilador avisa você, pra evitar de ficar manipulando referências nulas.

Basta criar a variável já instanciando-a, assim:

String carta = new String();

A sua lógica pode estar certa, de modo que pelo menos uma das condições de um dos if’s será atendida, mas o compilador não tem ciência disso e sempre vai te avisar que pode acontecer de o método retornar uma referência nula.

:wink:

Nossa, muito obrigado mesmo!
:DD

Pelo que percebi, se trata de um atributo com escopo local, logo deve ser inicializado.

Inicialo com null também é valido.

String carta = null;
if(x) carta = "a";
return carta;

Dentre as varias soluções citadas aqui, existe também está :


String carta = " ";

que nada mais é do que inicializar a sua variável com um espaço em branco que é considero um carácter.
Complementando é sempre bom inicializar as suas variáveis, independente se é no metodo ou na classe, pois assim você evita essa situação e outras.

Se a sua duvida foi solucionada por favor altere o assunto do primeiro post e coloque assim:

[Resolvido] Variável não foi inicializada.

pois assim você ajuda outros usuários com duvidas semelhantes a sua.