¿Alguien que sepa programar en Java?

Foro destinado a cualquier tipo de tema relacionado con informática. Dudas técnicas, configuración de programas, recomendaciones de hardware y sofware, limpieza de virus, etc.
Cerrado
Avatar de Usuario
Ill
El Pibe
El Pibe
Mensajes: 13410
Registrado: 18 Nov 2006 00:30
Puntos de Vida: 10 de 10
Resident Evil Favorito: Resident Evil Operation Raccoon City
PS3 Network ID: wosse
Steam ID: wosse22
Ubicación: City of Ocala
España 
x 935

¿Alguien que sepa programar en Java?

Mensaje por Ill » 19 Nov 2014 19:07

Necesito hacer un juego parecido al Lingo de manera muy básica, cosa con la que me las he podido apañar. Sin embargo, cuando la palabra a adivinar es, por ejemplo, "amigo" y le introduzco más de una a, m, i, g u o (y aplicable a cualquier palabra y cualquier letra) en vez de marcarme sólo una de esas letras (ya sea colocada correctamente o marcada con un interrogante si está en la palabra pero no en la posición correcta) me indica que todas se encuentran en la palabra tal que así:

Código: Seleccionar todo

- La palabra es "amigo".

- Introduzco "aamig".

- El programa debería marcarme "a_???" pero en vez de eso me indica "a????".
Llevo no sé ya cuántos días dándole vueltas al asunto y ni siquiera con la ayuda de varios compañeros podemos dilucidar cómo conseguir que el programa deje de mostrar los caracteres que se repiten cuando no deberían, os dejo el código que tengo para ver si podéis echarme un cable:

Código: Seleccionar todo

public static void main(String[] args) {
		
		//ARRAY DE PALABRAS QUE SE USARÁN PARA EL JUEGO
		
		String[]palabras = {"enero", "amigo", "unico", "turco", "coxis", "nubes", "besar", "pisar", 
				"madre", "padre", "marzo", "abril", "barco", "piano", "carta", "barca", "tarea", 
				"movil", "cruce", "cinco", "siete", "nueve", "junio", "julio", "lunes", "nuevo",
				"pesar", "atril", "friki", "circo", "cirio", "dalia", "motor", "araña"};
		
		int posicion = (int) (Math.random()*palabras.length);
		
		String palabra_a_adivinar = palabras[posicion];
		
		Scanner entrada = new Scanner (System.in);
		
		String palabra = "";
		
		int intentos = 0;
		
		System.out.println("Intenta adivinar la palabra de cinco letras. Tienes cinco intentos");
		
		//EL JUEGO SE EJECUTA MIENTRAS EL JUGADOR NO LLEGUE A LOS CINCO INTENTOS
		
		while (intentos != 5) {
			
			palabra = entrada.nextLine();
			
			palabra = palabra.toLowerCase();
			
			if (palabra.length() != 5) {
				
				System.out.println();
				
				System.out.println("Error, has de introducir una palabra con cinco letras");
				
				System.exit(0);
				
			}
			
			//SE RECORRE LA PALABRA ELEGIDA ALEATORIAMENTE DEL ARRAY PARA COMPARARLA CON LA INTRODUCIDA POR EL JUGADOR
			
			for (int i = 0; i < palabra_a_adivinar.length(); i++) {
				
					if ((palabra_a_adivinar.charAt(i)) == (palabra.charAt(i))) {
						
						System.out.print(palabra_a_adivinar.charAt(i));
					
					}
					
					else if ((palabra.charAt(i)) == (palabra_a_adivinar.charAt(0)) || (palabra.charAt(i)) == (palabra_a_adivinar.charAt(1)) || 
							(palabra.charAt(i)) == (palabra_a_adivinar.charAt(2)) || (palabra.charAt(i)) == (palabra_a_adivinar.charAt(3)) ||
							(palabra.charAt(i)) == (palabra_a_adivinar.charAt(4))) {
							
						System.out.print('?');
						
					}
							
					else {
						
						System.out.print(' ');
						
					}
					
			}
			
			intentos++;
			
			//FIN DEL JUEGO, EL JUGADOR GANA
			
			if (palabra.equals(palabra_a_adivinar)) {
				
				System.out.println();
			
				System.out.println("¡Has acertado, bien hecho!");
				
				System.out.println();
				
				System.out.println("Has necesitado " +intentos+ " intentos");
				
				System.exit(0);
			
			}
			
			//FIN DEL JUEGO, EL JUGADOR PIERDE (A MENOS QUE ACIERTE EN SU ÚLTIMO INTENTO, ENTONCES GANA)
			
			if (intentos == 5) {
				
				System.out.println();
				
				System.out.println("Has perdido, la palabra era " +palabra_a_adivinar);
				
				System.exit(0);
				
			}
			
			//EL JUGADOR SE HA EQUIVOCADO, SE SUMA OTRO INTENTO Y SE SIGUE LA PARTIDA
			
			if (palabra_a_adivinar != palabra) {
				
				System.out.println();
				
				System.out.println("Has introducido una palabra errónea, inténtalo de nuevo");
				
			}
			
		}
Grasias de hantebraso.
Imagen

For those who have a heart

Avatar de Usuario
beltran
WebMaster
Mensajes: 12768
Registrado: 02 Feb 2003 04:41
Puntos de Vida: 10 de 10
Resident Evil Favorito: Resident Evil Remake
PS3 Network ID: dark_ohzaru
XBOX GameTarg: ohzaru
Steam ID: dark_ohzaru
Nintendo Network ID: dark_ohzaru
Ubicación: Almería
España 
x 147
Contactar:

Re: ¿Alguien que sepa programar en Java?

Mensaje por beltran » 19 Nov 2014 22:22

El problema es que siempre comparas por los caracteres ya descubiertos. Lo que tienes que hacer es ir quitándolos conforme los vas descubriendo.

Tengo un poco oxidado el java clásico y seguramente se pueda optimizar más con alguna función de cadenas, pero básicamente lo que tendrías que hacer es algo parecido a lo siguiente:

Código: Seleccionar todo

String temp=palabra_a_adivinar;
for (int i = 0; i < palabra_a_adivinar.length(); i++) {

  if ((palabra_a_adivinar.charAt(i)) == (palabra.charAt(i))) {

    System.out.print(palabra_a_adivinar.charAt(i));

    // guardamos en temp la palabra a adivinar marcamos con * el caracter descubierto en su posición
    temp=temp.substring(0, i) + "*"+temp.substring(i + 1);


  }
  else {

    // si la cadena temporal contiene la letra actual escribimos una ? en caso contrario un espacio
    if(temp.replace("*","").indexOf(palabra.charAt(i))>-1){
      System.out.print('?');
    }
    else{
      System.out.print('_');
    }

  }
}
Imagen

Avatar de Usuario
Ill
El Pibe
El Pibe
Mensajes: 13410
Registrado: 18 Nov 2006 00:30
Puntos de Vida: 10 de 10
Resident Evil Favorito: Resident Evil Operation Raccoon City
PS3 Network ID: wosse
Steam ID: wosse22
Ubicación: City of Ocala
España 
x 935

Re: ¿Alguien que sepa programar en Java?

Mensaje por Ill » 21 Nov 2014 17:08

Creo que ya lo pillo, muchísimas gracias Boss (L)

Moderadores, sierren el foro.
Imagen

For those who have a heart

Avatar de Usuario
Ele Alzerav
Demon Knight
Demon Knight
Mensajes: 14572
Registrado: 10 Feb 2008 19:59
Puntos de Vida: 10 de 10
Resident Evil Favorito: Resident Evil Remake
Ubicación: Mordor
España 
x 361

Re: ¿Alguien que sepa programar en Java?

Mensaje por Ele Alzerav » 21 Nov 2014 17:15

Serrado a petición del autor

Imagen

c[]

Cerrado