Foro de elhacker.net

Programación => Java => Mensaje iniciado por: overxfl0w13 en 8 Noviembre 2012, 16:03 pm



Título: Piedra Papel Tijeras [JAVA]
Publicado por: overxfl0w13 en 8 Noviembre 2012, 16:03 pm
No consigo hacer funcionar el programa, siempre me devuelve lo mismo
"El jugador no ha introducido una opcion valida" y "Ganador PC", cuando es mentira.

El código es el siguiente:

Código
  1. import java.util.*;
  2. public class juegoInfantil
  3. {
  4.    public final int Piedra = 0,Papel = 1,Tijeras = 2;
  5.    public String eleccionJugador1,eleccionJugador2;
  6.    public int ganadorJuego; // 0 si gana Pc 1 si gana jugador 2 empate
  7.  
  8.    public juegoInfantil(String eleccionJugador1)
  9.    {
  10.        this.eleccionJugador1 = eleccionJugador1;
  11.        this.eleccionJugador1 = this.eleccionJugador1.toUpperCase();
  12.    }
  13.  
  14.    public void setEleccionJugador2()
  15.    {
  16.        Random numeroRandom = new Random();
  17.        int eleccionPc = numeroRandom.nextInt(3);
  18.        switch(eleccionPc)
  19.        {
  20.            case 0: this.eleccionJugador2 = "Piedra";
  21.            break;
  22.            case 1: this.eleccionJugador2 = "Papel";
  23.            break;
  24.            case 2: this.eleccionJugador2 = "Tijeras";
  25.            break;
  26.        }
  27.        this.eleccionJugador2 = this.eleccionJugador2.toUpperCase();
  28.        System.out.println("La eleccion del jugador 2 es: " + this.eleccionJugador2 + " y la del jugador 1: " + this.eleccionJugador1);
  29.    }
  30.  
  31.    public void inicioJuego()
  32.    {
  33.        if(this.eleccionJugador1 == "PIEDRA")
  34.        {
  35.            if(this.eleccionJugador2 == "PAPEL") this.ganadorJuego = 0;
  36.            else if(this.eleccionJugador2 == "TIJERAS") this.ganadorJuego = 1;
  37.            else this.ganadorJuego = 2;
  38.        }
  39.        else if(this.eleccionJugador1 == "PAPEL")
  40.        {
  41.            if(this.eleccionJugador2 == "PAPEL") this.ganadorJuego = 2;
  42.            else if(this.eleccionJugador2 == "TIJERAS") this.ganadorJuego = 0;
  43.            else this.ganadorJuego = 1;
  44.        }
  45.        else if(this.eleccionJugador1 == "TIJERAS")
  46.        {
  47.            if(this.eleccionJugador2 == "TIJERAS") this.ganadorJuego = 2;
  48.            else if(this.eleccionJugador2 == "PIEDRA") this.ganadorJuego = 0;
  49.            else this.ganadorJuego = 1;
  50.        }
  51.        else if(this.eleccionJugador1 != "TIJERAS" && this.eleccionJugador1 != "PAPEL" && this.eleccionJugador1 != "PIEDRA")
  52.        {
  53.            System.out.print("El jugador no ha introducido una opcion valida");
  54.            return;
  55.        }  
  56.    }
  57.  
  58.    public String getGanador()
  59.    {
  60.        if(this.ganadorJuego == 0) return "Ganador Pc";
  61.        else if(this.ganadorJuego == 1) return "Ganador Jugador";
  62.        else if(this.ganadorJuego == 2) return "Empate o Tablas";
  63.        return "Error";
  64.    }
  65.  
  66.    public static void main(String args[])
  67.    {
  68.        Scanner entradaTeclado = new Scanner(System.in);
  69.        System.out.println("Introduce tu opcion: ");
  70.        String entradaJugador = entradaTeclado.next();
  71.        entradaJugador = entradaJugador.toUpperCase();
  72.        juegoInfantil piedraPapelTijera = new juegoInfantil(entradaJugador);
  73.        piedraPapelTijera.setEleccionJugador2();
  74.        piedraPapelTijera.inicioJuego();
  75.        System.out.printf("%n%s",piedraPapelTijera.getGanador());
  76.    }
  77. }
  78.  

No sé que pasará pero me trae de cabeza xD


Título: Re: Piedra Papel Tijeras [JAVA]
Publicado por: Valkyr en 8 Noviembre 2012, 22:12 pm
La comparación de cadenas en Java se realiza con el método equals el cual tienen todas las clases puesto que se hereda de Object.

Código
  1. "PIEDRA".equalsIgnoreCase(this.eleccionJugador1)
  2.  

Con ese método compararías la entrada de forma insensible a mayúsculas y minúsculas. Cabe destacar que realizo la llamada al método sobre el objeto "PIEDRA" (que es un String) para que en caso de que eleccionJugador1 sea null, no de una excepción.

Saludos.


Título: Re: Piedra Papel Tijeras [JAVA]
Publicado por: overxfl0w13 en 9 Noviembre 2012, 15:33 pm
La comparación de cadenas en Java se realiza con el método equals el cual tienen todas las clases puesto que se hereda de Object.

Código
  1. "PIEDRA".equalsIgnoreCase(this.eleccionJugador1)
  2.  

Con ese método compararías la entrada de forma insensible a mayúsculas y minúsculas. Cabe destacar que realizo la llamada al método sobre el objeto "PIEDRA" (que es un String) para que en caso de que eleccionJugador1 sea null, no de una excepción.

Saludos.

Muchas gracias al final me dí cuenta del fallo, la costumbre de C++.

Un saludo :)