Erro EP1

Erro EP1

por Mariana Guerreiro -
Número de respostas: 14

(1)

void jogaCarta(int cartaUsuario, int cartaComputador)

> jogo.jogaCarta(3);
Error: No 'jogaCarta' method in 'Truco' with arguments: (int)

(2)

void jogaCarta(int cartaUsuario)

> jogo.jogaCarta(2);
O computador jogou a carta 0 .

Se faço do jeito (1), o usuário não consegue jogar a carta. Mas se faço do jeito (2), o computador joga uma carta igual a 0, o que não pode acontecer. Não estou entendo o porquê desses dois erros.


Em resposta à Mariana Guerreiro

Re: Erro EP1

por Vinícius Daros -
Oi, Mariana

Na primeira tentativa, você declarou que o método jogaCarta recebe dois parâmetros inteiros: cartaUsuário e cartaComputador. Porém, na hora de chamar jogo.jogaCarta, você está passando apenas um valor de parâmetro. Por isso ocorre o erro.
Contudo, mesmo que você mandasse dois valores pela chamada do método, isso não faria sentido, uma vez que o jogador não deve escolher qual carta o computador vai jogar.

No segundo caso, que parece mais correto, o computador está jogando uma carta de valor zero muito provavelmente porque você não inicializou suas variáveis (zero é o valor default para parâmetros de classe).

Posso estar enganado, mas chuto que você colocou o sorteio das cartas dentro do método iniciaJogo(). Se esse for o caso, experimente a seguinte sequência na aba Interactions:
> jogo = new Truco();
> jogo.iniciaJogo();
> jogo.jogaCarta(X);

Onde X deve ser uma carta que você tenha recebido.

Se meu palpite estiver certo, com isso você receberá a resposta esperada. Mas se você criou um método de sorteio separadamente, tente chama-lo antes de chamar jogaCarta.

Abraço,

Vinícius
Em resposta à Vinícius Daros

Re: Erro EP1

por Mariana Guerreiro -

Realmente Vinícius, coloquei o sorteio das cartas dentro do método iniciaJogo(). Mas inicializei as cartas do computador do mesmo jeito que inicializei as cartas do usuário. Continuo não entendendo o porquê do erro. Posso te mandar meu programa via e-mail para você dar uma olhada?

Em resposta à Mariana Guerreiro

Re: Erro EP1

por Vinícius Daros -
Oi, Mariana

Verifique se você declarou as cartas do computador como atributos de classe e não as declarou dentro do método iniciaJogo novamente.
Deixe-me explicar melhor: seu código não deve estar assim:

class Truco
{
int cartaComputador1, cartaComputador2, cartaComputador3;

void inciaJogo() {
java.util.Random gerador = new java.util.Random();

int cartaComputador1 = gerador.nextInt(10) + 1;
/* Na liha acima, houve redeclaração da variável! */
}
}

Por que esse trecho está errado?
Note que, dentro de iniciaJogo, colocou-se o "int" antes da atribuição de cartaComputador1. Dessa forma, o compilador entende que você está criando uma nova variável com esse nome. Isso implica em duas coisas:
1- O valor gerado é atribuido à variável do método e não à da classe;

2- O escopo da nova variável é apenas o método iniciaJogo. Com isso, ao fim do bloco de comando, essa variável não existe mais. Logo, na próxima vez que você pede o valor de cartaComputador1, será mostrado o valor do paramêtro de classe, que não foi inicializado.

Como resolver?
Simplesmente apage o "int" que está dentro de iniciaJogo(). A linha ficaria assim:
cartaComputador1 = gerador.nextInt(10) + 1;

Pelo que você disse, acho que é isso que está acontecendo.

Sobre mandar o código por e-mail, gostaria de salientar um ponto:
O objetivo do fórum é justamente resolver as dúvidas de forma que todos possam acompanhar as perguntas e respostas. A idéia é que a resposta para a dúvida de um possa ajudar todo mundo.
Resolver casos particularmente por e-mail acaba impossibilitando atingir essa meta.
Além disso, se você precisar que algum dos monitores realmente olhe seu código (algumas vezes, é só assim mesmo para achar o erro), vá em algum dos plantões. Estamos lá para isso ; ]

Espero ter ajudado.
Abraço,

Vinícius
Em resposta à Vinícius Daros

Re: Erro EP1

por Mariana Guerreiro -

Meu código estava do jeito que você disse. Corrigi e agora deu certo. Mas as cartas do usuário também estavam assim. Por que com elas não dava erro então?

Sobre mandar o código via e-mail, faço inglês na FEA de segunda e quarta, das 12:00 às 13:30 h. Na segunda passada cheguei a ir na monitoria, mas cheguei no finalzinho e o monitor estava atendendo outro aluno. A monitoria não está em um horário muito acessível para mim, por isso sugeri mandar o código via e-mail.

Em resposta à Mariana Guerreiro

Re: Erro EP1

por Vinícius Daros -
Oi, Mariana

Realmente, seu horário está apertado.
Vamos combinar o seguinte: na quarta feira, depois da sua aula, passe no CEC para eu ver como está seu programa.
Prometo que espero você chegar. =]

Abraços,

Vinícius
Em resposta à Vinícius Daros

Re: Erro EP1

por Mariana Guerreiro -

Então Vinícius, segui as dicas do outro monitor e consegui arrumar umas coisas, mas não estou conseguindo jogar as outras cartas. A partir da segunda carta, o computador joga a mesma carta que havia jogado na primeira rodada.

Utilizei esses comandos e acho que está dando errado porque teria que atribuir o jogouCarta1Computador a carta1Computador, mas isso não é possível, já que são variáveis diferentes (boolean e int). Como devo fazer então?

    boolean jogouCarta1Computador = false;
    boolean jogouCarta2Computador = false;
    boolean jogouCarta3Computador = false;
   
    if (jogouCarta1Computador)

Em resposta à Mariana Guerreiro

Re: Erro EP1

por Vinícius Daros -
Oi, Mariana

Como você está usando flags indicando se uma carta já foi jogada ou não, toda vez que uma carta é jogada, deve-se atualizar o valor da flag correspondente.
Ou seja, supondo que o computador decidiu jogar a segunda carta, faz-se:

System.out.println("O computador jogou: " + carta2Computador);
jogouCarta2Computador;

Para verificar se a carta escolhida já foi jogada, é quase o que você fez:

if (!jogouCarta2Computador) {
/* Só entra aqui se carta2Computador ainda não foi jogada. */
}

Espero ter ajudado.
Abraço,

Vinícius
Em resposta à Vinícius Daros

Re: Erro EP1

por Mariana Guerreiro -

Fiz isso, mas está dando erro:

System.out.println("O computador jogou a carta " + carta1Computador + " .");
          cartaComputador = carta1Computador; (essa atribuição já estava, serve para depois comparar com a cartaUsuario e definir o placar)
          computadorJogouCarta1;

File: C:\Users\Nathallia\Truco.java  [line: 44]
Error: not a statement

Em resposta à Mariana Guerreiro

Re: Erro EP1

por Vinícius Daros -
Peço desculpas.

Esqueci de digitar a atribuição de valor para computadorJogouCarta1.
O correto é:

computadorJogouCarta1 = true;

Agora não vai mais aparecer esse erro de compilação.

Mais uma vez, me desculpe.
Abraço,

Vinícius
Em resposta à Vinícius Daros

Re: Erro EP1

por Mariana Guerreiro -

Não deu nenhum erro de compilação, mas também não deu certo.

if (!jogouCarta2Computador) {

/* Só entra aqui se carta2Computador ainda não foi jogada. */

}

Ele só entra ali quando a carta 2 do computador ainda não foi jogada, mas como eu vou fazer as comparações certas se eu não sei se a carta jogada foi a 1 ou a 3?

Sinceramente, não estou entendendo nada.

Em resposta à Mariana Guerreiro

Re: Erro EP1

por Arthur Gabriel de Santana -
Oi Mariana, você vai ter que criar um bloco para cada caso, por exemplo
- se não jogou nenhuma carta, pode escolher entre todas livremente;
- se jogou duas cartas, não precisa escolher, pois só pode jogar uma;
- se jogou uma carta, você precisa analisar cada combinação no conjunto {(1,2), (1,3), (2,3)}. Nem é tanta coisa assim, certo? =).
Em resposta à Arthur Gabriel de Santana

Re: Erro EP1

por Mariana Guerreiro -

Obrigada Arthur, mas acabei optando por zerar as cartas que eram utilizadas, tanto as do usuário com as do computador, é bem mais fácil.

Mas tenho duas dúvidas:

1) O programa tem que mostrar em que método as cartas que o usuário recebeu? Tanto faz ou tem que ser no método jogaCarta?

2) Quando o usuário tenta jogar uma carta que não possui em mãos ou quando já foi anunciado o fim da partida, o programa só avisa que a carta é inválida. Tem que especificar se o usuário está jogando uma carta que não tem ou se ele teria que começar uma nova partida para voltar a jogar?

Em resposta à Mariana Guerreiro

Re: Erro EP1

por Vinícius Daros -
Oi, Mariana

1- Depois que as cartas foram sorteadas, você deve mostrar quais cartas o usuário recebeu. Ou seja, essa será uma das últimas instruções do seu iniciaJogo();

2- Não é necessário especificar.

Abraço,

Vinícius