elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  [Resuelto] Ayuda proyecto java
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Resuelto] Ayuda proyecto java  (Leído 5,519 veces)
hossman92

Desconectado Desconectado

Mensajes: 7


Ver Perfil
[Resuelto] Ayuda proyecto java
« en: 30 Enero 2015, 16:57 pm »

hola buenas me han mandando en mi ciclo de DAM el ejercicio de piedra papel o tijera en java y no consigo que me cuente el valor de la opcion elejida por el jugador a la ora de comparar que ha ganado si el jugador o la makina. Os dejo el codigo y en la linea que veo que falla con el modo debug he puesto el comentario. Gracias por adelantado!!

El error esta en el metodo void calculoGanador()

PD: Se que falta todavia el bucle while del juego para poder jugar varias veces y el menu lo tengo quitado para hacer pruebas, se va directamente a la opcion jugar.

Clase donde creo que esta el error

Código:
package paquete;

import java.io.BufferedReader;
import java.io.InputStreamReader;
//import java.util.Scanner;

public class playerIA {

private String nombre;
private int puntosPlayer,puntosIA;
private String opcPlayer,opcIA;
private String opcion;
private int opc;

public playerIA(String nombrePlayer){

nombre = nombrePlayer;
puntosPlayer=0;
puntosIA=0;
}
public void eleccionPlayer(){
System.out.println("Introduce tu eleccion ('Piedra''Papel''Tijera')");
InputStreamReader isr = new InputStreamReader (System.in);
BufferedReader br = new BufferedReader (isr);
try{
this.opcPlayer = br.readLine();
}
catch(Exception e){
e.printStackTrace();
}

}
public void eleccionIA(){
int num = (int)(Math.random()*100);
if (num>=0&&num<=33){
opcIA = "piedra";

}
else if (num>33&&num<66){
opcIA = "papel";

}
else if(num>=66&&num<=100){
opcIA = "tijera";

}
}
public void calculoGanador(){
/*ERROR AQUI *****************************************/
//ERROR AQUI NO LEE PARA COMPARAR la opcPlayer!!!!!!!!!!
//anoser que se les de un valor directo aki (si leo de teclado aki falla igual)
//opcPlayer = "papel";



System.out.println("IA: "+opcIA+" Tu: "+opcPlayer);
if (opcIA=="piedra"){

if (opcPlayer =="papel"){
puntosPlayer++;
System.out.println("Gana "+ nombre);
}
else if (opcPlayer == "tijera"){
puntosIA++;
System.out.println("Gana la IA!!");
}
}
else if (opcIA=="papel"){
if (opcPlayer == "piedra"){
puntosIA++;
System.out.println("Gana la IA!!");
}
else if (opcPlayer =="tijera"){
puntosPlayer++;
System.out.println("Gana "+ nombre);
}
}
else if (opcIA=="tijera"){
if (opcPlayer == "papel"){
puntosIA++;
System.out.println("Gana la IA!!");
}
else if (opcPlayer =="piedra"){
puntosPlayer++;
System.out.println("Gana "+ nombre);
}
}
if (opcIA==opcPlayer){
System.out.println("EMPATE!!");
}
}
public int getPuntosPlayer(){
return puntosPlayer;
}
public int getPuntosIA(){
return puntosIA;
}
public String getName(){
return nombre;
}
public String getopcIA(){
return opcIA;
}
public String getopcPlayer(){
return opcPlayer;
}
public int menu(){
System.out.println("Bienvenido a Piedra Papel o Tijera!!!");
System.out.println("Seleccione una opcion: 1.Jugar 2.Instrucciones 3.Salir");
InputStreamReader isr = new InputStreamReader (System.in);
BufferedReader br = new BufferedReader (isr);
try{
opcion = br.readLine();
}
catch(Exception e){
e.printStackTrace();
}

try {
opc = Integer.parseInt(opcion);
}catch(Exception e){
System.err.println("Error de conversion de datos. "+e.toString());
}
return opc;
}
public void instrucciones(){
System.out.println("Bienvenido a las instrucciones del juego. "
+ "Para jugar pulsa en jugar e introduce la palabra 'piedra' , 'papel' , 'tijera' ");
System.out.println("Piedra gana a Tijera");
System.out.println("Tijera gana a Papel");
System.out.println("Papel gana a Piedra");
}
public void pantallaJuego(int player,int IA,String nombre){
System.out.println("Marcador: "+nombre+": "+player+" IA: "+IA);
}
}

Clase el main

Código:
package paquete;

public class Ejecutable {

public static void main(String[] args) {


String nombre = "Jugador";
playerIA juego = new playerIA(nombre);
int opcion = 1;
if (opcion == 1){
juego.eleccionIA();
juego.eleccionPlayer();
juego.calculoGanador();
int pPlayer =juego.getPuntosPlayer();
int pIA = juego.getPuntosIA();
String name = juego.getName();
juego.pantallaJuego(pPlayer,pIA,name);
}
else if (opcion == 2){
juego.instrucciones();
}
else if (opcion == 3){

}
else {

}

}

}


« Última modificación: 5 Febrero 2015, 15:20 pm por hossman92 » En línea

3n31ch


Desconectado Desconectado

Mensajes: 445


Grandes conocimientos engendran grandes dudas


Ver Perfil
Re: Ayuda proyecto java
« Respuesta #1 en: 30 Enero 2015, 17:42 pm »

Te recomiendo leer este post:

http://foro.elhacker.net/java/aporte_buenas_practicas_y_convenciones_en_java_parte_uno_convenciones-t428844.0.html

Me gustaría que intentaras utilizando equals para comparar String, debo recordar que nunca utilices la comparación == con un String.

Código
  1. if (opcIA.equals("papel")) {}

Estoy viendo tu código, aun no hago pruebas.



Edito. Lo probé y con equals parece funcionar. Confirmalo y si funciona da el tema por solucionado  ;D

Si quieres saber porque utilizar equals y no ==, lee el siguiente articulo:

http://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=628:el-metodo-equals-en-java-diferencia-entre-igualdad-e-identidad-comparar-objetos-ejemplos-cu00662b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188



Sigue practicando, tienes muchos errores de lógica, ese programa que estas haciendo tiene muchas formas de solucionarlo sin necesidad de tanto código.


« Última modificación: 30 Enero 2015, 17:48 pm por Nac-ho » En línea

IlconZy

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda proyecto java
« Respuesta #2 en: 1 Febrero 2015, 22:41 pm »

La parte de las condiciones te debería funcionar, aún así usa equals para comparar strings.
El error debe ocurrir cuando intentas leer de teclado, yo nunca he usado InputStreamReader ni BufferedReader asi que no se exactamente como funcionan, pero con un Scanner te debería funcionar facilmente.

Código
  1. Scanner sc = new Scanner(System.in);
  2. this.opcPlayer = sc.nextLine();
  3.  

Ten cuidado con las mayúsculas y las minúsculas

Y aparte, lo que haces con el método pantallaJuego() no tiene ningun sentido, porque los atributos los tienes en la propia clase, sacandolos al main y pasándolos como parámetros lo único que consigues es gastar más cpu.

Espero que te sirva de ayuda, un saludo!
En línea

3n31ch


Desconectado Desconectado

Mensajes: 445


Grandes conocimientos engendran grandes dudas


Ver Perfil
Re: Ayuda proyecto java
« Respuesta #3 en: 1 Febrero 2015, 23:03 pm »

Amigo mio, la verdad es que el error si era por culpa de la comparación de Strings. (Al menos eso logre confirmar)

Si no sabes como funciona BufferedReader entonces como puede saber que es un error?  :xD (Solo me llamo la atención la seguridad con la cual dijiste eso.)

Te explico, entre Scanner y BufferedReader existen algunas diferencias.

  • BufferedReader tiene una memoria mucho mas grande que Scanner.
  • Scanner puede hacer uso de distintos tipos de datos mientras que BufferReader solo puede almacenar String.
  • BufferedReader es sincrona y Scanner no lo es. Por esta razon se debe utilizar BufferedReader si se esta trabajando con Threads.
  • BufferedReader es mas rapido que Scanner

Como esta hay muchas mas características que los podrían diferenciar pero para mi una de las principales es el hecho de que BufferedReader a manejar los errores utilizando las sentencias try catch o similares.

Recomiendo el uso de BufferedReader aun cuando Scanner es mucho mas sencillo de usar.
En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Ayuda proyecto java
« Respuesta #4 en: 1 Febrero 2015, 23:05 pm »

Como ya te lo han dicho, en Java las cadenas no se comparan igual como con javascript o PHP. En Java el operador "==" lo que hace es comparar referencias, y con ésto me refiero a memoria.

Aportando algo pequeño para que puedas entenderlo, en el siguiente ejemplo, la variable name es guardado en memoria con el valor "Bugs Bunny". Al comparar lo con el texto "Bugs Bunny", dará true pero no porque las cadenas sean iguales, si no porque apuntan a la misma dirección de memoria.

Código
  1. String name = "Bugs Bunny";
  2. System.out.println(name == "Bugs Bunny")

El operador == evalúa ambos lados. name que es el texto "Bugs Bunny" (izquierda) hace referencia a la dirección 0X0FAB23D4, y "Bugs Bunny" (derecha) hace referencia a la dirección de memoria 0X0FAB23D4. Es decir, la misma dirección de memoria.

Pero si haces:

Código
  1. String name = new String("Bugs Bunny");
  2. System.out.println(name == "Bugs Bunny");

El compilador determinará que es falso. Porque name es un objeto que engloba un texto, pero que tiene muchas otras propiedades, mientras que "Bugs Bunny" es un texto simple. Por lo tanto, no son iguales. En Java, al hacer uso de new creas una nueva instancia de dicha clase con lo que se le asigna una dirección independiente de memoria.

El método equals lo que hace es comparar el texto de dos objetos String. Por lo que, es lo más adecuado para comparar cadenas.

Salu2.

En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
IlconZy

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda proyecto java
« Respuesta #5 en: 2 Febrero 2015, 10:40 am »

Si las condiciones es lo que primero parece que debe fallar, pero como decía que si daba valores a las variables directamente le funcionaba y el error venía de cuando lo pedía por teclado... pensé que podía ser cosa de la forma de recoger la información por teclado.

Luego me miraré lo de BufferedReader más a fondo gracías por tu aportación:)
En línea

hossman92

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Ayuda proyecto java
« Respuesta #6 en: 5 Febrero 2015, 15:12 pm »

sii por fin muchas gracias era lo del .equals que peso me he quitado de encima muchisimas gracias a todos! ya he podido entregar el proyecto completo y funcionando a la perfeccion os debo una cerveza a todos jajaja
En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Ayuda proyecto java
« Respuesta #7 en: 5 Febrero 2015, 15:17 pm »

Una heiniken para mí  ;D

Salu2 y cualquier duda te pasas por acá.
En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
hossman92

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Ayuda proyecto java
« Respuesta #8 en: 5 Febrero 2015, 15:19 pm »

Si las condiciones es lo que primero parece que debe fallar, pero como decía que si daba valores a las variables directamente le funcionaba y el error venía de cuando lo pedía por teclado... pensé que podía ser cosa de la forma de recoger la información por teclado.

Luego me miraré lo de BufferedReader más a fondo gracías por tu aportación:)
yo tambien pense que fuera de eso si no era en las condiciones pero probe tambien con scanner y me pasaba lo mismo asi que ya lo descarte jajaj

y gracias Gus porque aparte de que funcione entiendo el porque sobre la referencia a memoria y todo eso me habeis ahorrado muchos problemas en el futuro  :D
En línea

3n31ch


Desconectado Desconectado

Mensajes: 445


Grandes conocimientos engendran grandes dudas


Ver Perfil
Re: [Resuelto] Ayuda proyecto java
« Respuesta #9 en: 5 Febrero 2015, 15:49 pm »

sii por fin muchas gracias era lo del .equals que peso me he quitado de encima muchisimas gracias a todos! ya he podido entregar el proyecto completo y funcionando a la perfeccion os debo una cerveza a todos jajaja

Yo te cobrare esa cerveza  :rolleyes:

Suerte con tus futuros proyectos. ^^ (No todos agradecen, muchas gracias por hacerlo)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con proyecto JAVA!
Java
oscarj24 7 5,314 Último mensaje 30 Noviembre 2009, 00:31 am
por Leyer
Ayuda Proyecto de Java Por favor!! « 1 2 »
Java
Said Aldana 13 7,035 Último mensaje 7 Diciembre 2009, 08:37 am
por Debci
ayuda con proyecto en java
Java
dutz 0 1,599 Último mensaje 4 Enero 2013, 01:06 am
por dutz
ayuda con proyecto de JAVA
Java
narcorasta 4 2,914 Último mensaje 26 Junio 2013, 01:21 am
por ivancea96
Ayuda con Sockets PHP y Java [RESUELTO]
PHP
LaThortilla (Effort) 1 2,910 Último mensaje 7 Mayo 2017, 01:44 am
por LaThortilla (Effort)
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines