Jogo Par ou Impar, Nenhum erro, mas não funcionando

9 respostas
R

Boa noite! Como foi o fim de semana? Espero que tenha sido excelente ^^

Me quebrei(sabado/domingo), tentando entender o porque que essa aplicação, tão simples, não funciona! Sou bem inciante em java xD

O projeto deve ter:
três classes:
Jogador (essa contem as especificações de nome, numero de dedos jogados, opção (par ou impar)
Jogo (vai os objetos Jogador 1 e 2 junto com as operações lógicas)
Principal

Não sei o porque mas o programa roda e não mostra o resultado!
Essa parte do código está na classe principal.

private String ganhador;
        
        public void resultado (Jogador j1, Jogador j2){
            long resul = ((j1.getNumD() + j2.getNumD()) % 2);
            if (resul >= 1){
                String ganhador = "Impar"; (A variável ganhador está sempre sublinhada em amarelo, o netbeans pede para que eu renomeie ela)
               
            }else{
                String ganhador = "Par";
            }
               
            if (ganhador.equals(j1.getOp())){
                System.out.println ("O jogador vencedor é:  "+ j1.getNome());
                System.out.println ("Dedos jogados: "+ j1.getNumD());
                
            }else{
                System.out.println ("O jogador vencedor é:"+ j2.getNome());
                System.out.println ("Dedos jogados: "+ j2.getNumD());
                
            }

Acho que ai é o problema do código. Se quiserem outras partes dele, só pedir.
O programa não aponta nenhum erro, ele roda só que não mostra resultado algum.
Porque, que o netbeans pede para renomear a variável "ganhador"?

9 Respostas

Ivan_Alves

Isso não deveria compilar já que você declara a variavel String ganhador no corpo if e ao sair dele que vc faz essa comparação
if (ganhador.equals(j1.getOp())){ …

tenta declarar a variavel ganhador no inicio do método.

Vingdel

Boa Noite, RedGrish!

Faça seu IF assim: if (resul != 0) ganhador = "Impar"; else ganhador = "Par";

O problema é que você já tinha declarado a variável ganhador antes, não precisa fazer isso de novo dentro do IF.

Abraço!

Lucas_Abbatepaolo

ele fica sublinhado pq vc esta declarando a variavel ganhador 2 vezes…um com variavel de instancia e outra como variavel de bloco.e é exatamente isso q esta fazendo com q naum haja resultado…

R

Brigado por essa força galera. Resolvi o problema da variável.
Agora falta o problema principal, eu rodo o código e nada aparece como resultado. Só isso:

run:
CONSTRUÍDO COM SUCESSO (tempo total: 10 segundos)

Apliquei seu código Vingdel

long resul = ((j1.getNumD() + j2.getNumD()) % 2); if (resul != 0){ ganhador = "Impar"; }else{ ganhador = "Par"; }

D

Bom… fica dificil te ajudar nesse probleminha, com apenas essas informacoes que vc passou… acho melhor vc postar a classe que esta apresentando o problema… pq com a sua primeira msg… vc só postou um metodo, falow…

R

O código:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.JOptionPane;

public class Principal {

        public static void main(String[] args) {
        
            Jogador j1 = new Jogador();
            String nome;
            String op;
            nome = JOptionPane.showInputDialog("Coloque seu nome(Jogador1):");
            j1.setNome(nome);
            op = JOptionPane.showInputDialog("Escolha,(Par) ou (Impar)");
            j1.setOp(op);

            if ("Par".equals(op)) {
                List<Integer> par = new ArrayList<Integer>();
                par.add(2);
                par.add(4);
                par.add(6);
                par.add(8);
                par.add(10);
                Collections.shuffle(par);
                int get = par.get(1);
                j1.setNumD(get);
            } else {
                List<Integer> impar = new ArrayList<Integer>();
                impar.add(1);
                impar.add(3);
                impar.add(5);
                impar.add(7);
                impar.add(9);
                Collections.shuffle(impar);
                Integer get = impar.get(1);
                j1.setNumD(get);
            }

            Jogador j2 = new Jogador();
            nome = JOptionPane.showInputDialog("Coloque seu nome(Jogador2):");
            j2.setNome(nome);
            op = JOptionPane.showInputDialog("Escolha,(Par) ou (Impar)");
            j2.setOp(op);
            if ("Par".equals(op)) {
                List<Integer> par = new ArrayList<Integer>();
                par.add(2);
                par.add(4);
                par.add(6);
                par.add(8);
                par.add(10);
                Collections.shuffle(par);
                Integer get = par.get(1);
                j2.setNumD(get);
            } else {
                List<Integer> impar = new ArrayList<Integer>();
                impar.add(1);
                impar.add(3);
                impar.add(5);  //cria um array e embaralha seus elementos
                impar.add(7);
                impar.add(9);
                Collections.shuffle(impar);
                Integer get = impar.get(1);
                j2.setNumD(get);
    }
        }

   private String ganhador;
        public void resultado (Jogador j1, Jogador j2){
            long resul = ((j1.getNumD() + j2.getNumD()) % 2);
            if (resul != 0){
                ganhador = "Impar";
            }else{
                ganhador = "Par";
            }
               
            if (ganhador.equals(j1.getOp())){
                System.out.println ("O jogador vencedor é:  "+ j1.getNome());
                System.out.println ("Dedos jogados: "+ j1.getNumD());
                
            }else{
                System.out.println ("O jogador vencedor é:"+ j2.getNome());
                System.out.println ("Dedos jogados: "+ j2.getNumD());
                
            }         
        }  
}

Se não for isso ainda, avisem o/ que eu posto as outras classes

Vingdel

Você em momento algum está chamando o método resultado(), faça isso na linha após o fechamento do segundo else passando os argumentos corretamente.

Já por atecipação te aviso que você terá que tornar o método resultado() static.

Abraço e boa sorte!

R

Vingdel:
Você em momento algum está chamando o método resultado(), faça isso na linha após o fechamento do segundo else passando os argumentos corretamente.

Já por atecipação te aviso que você terá que tornar o método resultado() static.

Boa noite o/

Ahh desculpa amigo, mas tentei de algumas maneias chamar o método jogodor(), mas não consegui certo. Esse código é o que tentei impletar seguindo seu conselho (chamar o método após o segundo else).

PS: Tentei também colocar:
public static void resultado

Mas nada D:

Abraço e boa sorte!

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.JOptionPane;

/**
 *
 * @author Ghon
 */
public class Principal {

    /**
     * @param args the command line arguments
     */
        public static void main(String[] args) {
        
            Jogador j1 = new Jogador();
            String nome;
            String op;
            nome = JOptionPane.showInputDialog("Coloque seu nome(Jogador1):");
            j1.setNome(nome);
            op = JOptionPane.showInputDialog("Escolha,(Par) ou (Impar)");
            j1.setOp(op);
            if ("Par".equals(op)) {
                List<Integer> par = new ArrayList<Integer>();
                par.add(2);
                par.add(4);
                par.add(6);
                par.add(8);
                par.add(10);
                Collections.shuffle(par);
                int get = par.get(1);
                j1.setNumD(get);
            } else {
                List<Integer> impar = new ArrayList<Integer>();
                impar.add(1);
                impar.add(3);
                impar.add(5);
                impar.add(7);
                impar.add(9);
                Collections.shuffle(impar);
                Integer get = impar.get(1);
                j1.setNumD(get);
                
            }
            
            Jogador j2 = new Jogador();
            nome = JOptionPane.showInputDialog("Coloque seu nome(Jogador2):");
            j2.setNome(nome);
            op = JOptionPane.showInputDialog("Escolha,(Par) ou (Impar)");
            j2.setOp(op);
            if ("Par".equals(op)) {
                List<Integer> par = new ArrayList<Integer>();
                par.add(2);
                par.add(4);
                par.add(6);
                par.add(8);
                par.add(10);
                Collections.shuffle(par);
                Integer get = par.get(1);
                j2.setNumD(get);
            } else {
                List<Integer> impar = new ArrayList<Integer>();
                impar.add(1);
                impar.add(3);
                impar.add(5);  //cria um array e embaralha seus elementos
                impar.add(7);
                impar.add(9);
                Collections.shuffle(impar);
                Integer get = impar.get(1);
                j2.setNumD(get);
    }
public void resultado (Jogador j1, Jogador j2){
        
        
   private String ganhador;
       
            long resul = ((j1.getNumD() + j2.getNumD()) % 2);
            if (resul != 0){
                ganhador = "Impar";
            }else{
                ganhador = "Par";
            }
               
            if (ganhador.equals(j1.getOp())){
                System.out.println ("O jogador vencedor é:  "+ j1.getNome());
                System.out.println ("Dedos jogados: "+ j1.getNumD());
                
            }else{
                System.out.println ("O jogador vencedor é:"+ j2.getNome());
                System.out.println ("Dedos jogados: "+ j2.getNumD());
                
            }         
        }
        
        }
		
       
}
Vingdel

Não amigo, eu disse para você chamar o método. O que você fez foi mudar a declaração do método de lugar, ficou pior ainda.

Desfaça isso.

Para que o método funcione você precisa chamar ele… Você o criou, mas precisa chamar ele passando os parâmetros necessários para que ele execute suas tarefas.

Abraço!

Criado 22 de maio de 2011
Ultima resposta 23 de mai. de 2011
Respostas 9
Participantes 5