inicialização de variáveis

inicialização de variáveis

by Rodolpho Talaisys Bernabel -
Number of replies: 4

Olá,

quando tento compilar meu EP surge a seguinte mensagem:

File: C:\Documents and Settings\Administrador.INTER\Truco2.java  [line: 43]
Error: variable carta1DoUsuário might not have been initialized.

Esta mensagem se repete para todas as outras variáveis.

O início do código do método é este:

void jogaCarta (int cartaDoUsuário)
        {
        int carta1DoUsuário; 
        int carta2DoUsuário;
        int carta3DoUsuário;
        int carta1DoComputador;
        int carta2DoComputador;
        int carta3DoComputador;
     
        while (cartaDoUsuário == carta1DoUsuário || cartaDoUsuário == carta2DoUsuário || cartaDoUsuário == carta3DoUsuário

A linha 43, onde aparece o erro é a do comando while.

Eu gerei os valores aleatórios das cartas no método anterior, o iniciaJogo(), mas não sei como exportar os valores para o método jogaCarta(), se é que isso é possível.

Qual é o problema?

Grato pela atenção,

Rodolpho.

In reply to Rodolpho Talaisys Bernabel

Re: inicialização de variáveis

by Claudiney Gonçalves Primo -

 Rodolpho.

 Tente realizar esta operação deixando todas as condições separadas por (), pois, eu tive o mesmo problema e era isto que estava acontecendo.... o programa entra no while e não reconhece o embaralhado de condições...

 While(( cartaDousuário== carta1Dousuario)||(cartaDousuario==carta2Dousuario)||(cartaDousuario==carta3Dousuario))

Claudiney

In reply to Rodolpho Talaisys Bernabel

Re: inicialização de variáveis

by Vinícius Daros -
Olá, Rodolpho

Vamos por partes:
1- O erro de compilação aparece porque você realmente não inicializou suas seis variáveis. Mas o que exatamente isso quer dizer? Veja que você declarou

int carta1DoUsuário;
int carta2DoUsuário; ...

e logo em seguida você quis testar se elas eram iguais a cartaDoUsuário, porém você não atribuiu nenhum valor a elas.
Uma forma de resolver esse problema é iniciar suas variáveis ao declara-las:

int carta1DoUsuário = 0;
int carta2DoUsuário = 0; ...

Pronto. Agora não mais haverá erro de compilação. Contudo, definitivamente não é isso que você quer, pois o valor das cartas serão zero toda vez que esse método for chamado. Assim, chegamos á próxima parte.

2- Você quer que as variáveis dentro do método tenham os valores anteriormente sorteados. Como fazer isso?
Desconfio que, em iniciaJogo(), você tenha declarado esses parâmetros da mesma forma que fez em jogaCarta(). Assim, o escopo dessas variáveis é apenas o método onde elas foram declaradas. Ou seja, carta1DoUsuário dentro de iniciaJogo() não existe fora desse método, o mesmo ocorre para jogaCarta().

O que queremos é que os valores de carta1DoUsuário, carta2DoUsuário, etc. possam ser compartilhados por todos os métodos da classe. Para tanto, o mais intuitivo é declara-los como atributos da classe. Fazemos isso declarando-os fora de qualquer método.
Então, sua classe Truco ficaria próxima de:

class Truco
{
int carta1DoUsuário;
int carta2DoUsuário;
int carta3DoUsuário;
int carta1DoComputador;
int carta2DoComputador;
int carta3DoComputador;

void iniciaJogo() {
/* Comandos... */

/* Atribui valor às variáveis. */
/* OBS: esses valores terão que ser sorteados! Isso é só um exemplo. */
carta1DoUsuário = 3;
carta2DoUsuário = 2;
carta3DoUsuário = 1;
}

void jogaCarta(int cartaDoUsuario) {
/* NÃO vamos declarar carta... aqui dentro. Queremos usar os parâmetros da classe. */

/* Comandos... */

while (cartaDoUsuário == carta1DoUsuário || cartaDoUsuário == carta2DoUsuário || cartaDoUsuário == carta3DoUsuário) {
/* Comandos dentro do while. */
}
}
}

Note que, agora, depois que o método iniciaJogo() terminar, os valores dos parâmetros serão mantidos. Assim, quando a comparação dentro do while será feita com os valores já alterados.

Espero que tenha ficado claro.
Se as dúvidas persistirem, é só avisar.

Abraço,

Vinícius