Foros del Web » Programación para mayores de 30 ;) » Java »

Problema con mi juegecitoo

Estas en el tema de Problema con mi juegecitoo en el foro de Java en Foros del Web. Estimados amigos programadores: Tengo un pequeño problema ya desde hace unas semanas... La verdad es que estoy haciendo un juego a lo ahorcado y me ...
  #1 (permalink)  
Antiguo 23/11/2015, 05:19
 
Fecha de Ingreso: enero-2014
Mensajes: 4
Antigüedad: 10 años, 3 meses
Puntos: 0
Problema con mi juegecitoo

Estimados amigos programadores:
Tengo un pequeño problema ya desde hace unas semanas... La verdad es que estoy haciendo un juego a lo ahorcado y me sale todo el rato un fallo o un bug cuando el programa pregunta, diga una letra para adivinar y yo pongo por ejemplo de la palabra DISCO pongo la D y me muestra D----, e incluso imprime un guion mas nose porque pero lo imprime, y si tiene mas de una letra de esas pondria ejemplo: de MONITOR si pongo la O deberia poner -O---O- pero el problema está en que siempre saca un error que pone: :huh: :huh: :huh:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(Unknown Source)
at ej01.ahorcado.main(ahorcado.java:72)
Y me jode porque estaba funcionando (mas o menos) y sale este error tan extraño
lo que me gustaría que me ayudasen a detectar el problema, soy novato en programación y no me vendría nada mal un empujoncito vuestro... Lo que quiero es que me vaya guardando las letras en la cadenavacia y a medida que me vaya preguntando pueda ir completando la palabra hasta el final... Si fuesen ustedes tan amables de echarme una mano lo estaré muy agradecido... Aqui les dejo el codigo... Gracias por todo, anticipadamente ;D

Código:
package ej01;
 
import java.util.*;
 
public class ahorcado {
 
 public static void main(String[] args) {
               int intentos,dato1,c=0,i,t,longit,longitud,l,cont1=0;
  char letra;
  String palabra="",letrapulsada,cadenavacia2="",cadenavacia="";
  String lista="PERRO LAPIZ ORDENADOR TECLADO PROCESADOR SISTEMA INTERFAZ UNIX PROGRAMA DISCO CONECTOR CABLEADO ALMOHADILLA VENTANA JERSEY CAMISETA PANTALON RECREO MONITOR BOCADILLO";
  Scanner teclado = new Scanner(System.in);
  Random azar =new Random();
     dato1=azar.nextInt(20)+1; //genera numero al azar de 1 a 20 para contar las 20 palabras que hay
 
     for(i=0; i<lista.length(); i++){ //recorremos la cadena para buscar nuestra palabra escogida por el numero al azar dado
 
           letra = lista.charAt(i); //Vamos contando letra a letra y guardandolo en la variable letra
 
            if(letra == ' ') { //si se encuentra con un espacio que sume 1 al contador 
                c++; //especifica porqué palabra del ciclo va
            }
            if(c == dato1) { //y cuando el contador coincida con el numero generado al azar que especifica la palabra que ha elegido
 
                palabra=palabra+lista.charAt(i+1); // que coja el carácter por el que va (+1 para que no coja el espacio), que es el que coincide con la palabra elegida y con el ciclo que se complete dicha palabra guardandolo en la variable palabra
            }
        }
 
 
        System.out.println(palabra);
        do{
         for(intentos=1;intentos<=10;intentos++){
          cadenavacia="";
             cadenavacia2="";
        System.out.println("Introduce una letra para adivinar la palabra: ");
        letrapulsada=teclado.nextLine();
        letrapulsada=letrapulsada.toUpperCase();
 
 
        if(palabra.indexOf(letrapulsada) >=0){ //si la letra que ha pulsado coincide con la letra pulsada por el usuario
 
         for(t=0;t<palabra.length();t++){ //para ir contando las letras
 
 
          if(!letrapulsada.equals(palabra.charAt(t))){ //que ponga la cadena en guiones
           cadenavacia=cadenavacia+"-";
 
           }
 
         }
 
        }
 
 
         longit=palabra.indexOf(letrapulsada); //posicion de esa letra
         cadenavacia=cadenavacia.substring(0,longit)+letrapulsada+cadenavacia.substring(longit,cadenavacia.length()-1);
      //Lo que hacemos es concatenar desde el inicio hasta la longitud de esa palabra y alli ponemos la letra, a continuacion hasta el final de la palabra 
         System.out.println(cadenavacia);
 
 
          longit=palabra.indexOf(letrapulsada);
       longitud=palabra.indexOf(letrapulsada, longit+1);
             cadenavacia2=cadenavacia.substring(0,longitud)+letrapulsada+cadenavacia.substring(longitud,cadenavacia.length()-1);
             System.out.println(cadenavacia2);
             System.out.println("Estas en el intento "+intentos);
 
         }
        }while(intentos>=10);
 
 }
}
  #2 (permalink)  
Antiguo 23/11/2015, 13:31
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Problema con mi juegecitoo

Buenas,

Toda tu logica para buscar la palabra al azar se deberia reducir en realidad a esto:

Código Java:
Ver original
  1. Random azar =new Random();
  2. dato1=azar.nextInt(20);
  3. palabra = lista.split("\\s+")[dato1];

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 24/11/2015, 03:31
 
Fecha de Ingreso: enero-2014
Mensajes: 4
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Problema con mi juegecitoo

Losé pero no nos dejan usar nada que no hayamos usado en clase... Aparte no estoy preguntando eso... Solo si me podrian ayudar con el codigo para acabar mi programa, y aber en que falla...
  #4 (permalink)  
Antiguo 24/11/2015, 05:56
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Problema con mi juegecitoo

Si solo puedes usar cosas que habéis dado en clase, entonces quiere decir que tu ya debes tener las herramientas para solventarlo solito.
__________________
Aviso: No se resuelven dudas por MP!
  #5 (permalink)  
Antiguo 24/11/2015, 08:50
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Problema con mi juegecitoo

Cita:
Losé pero no nos dejan usar nada que no hayamos usado en clase...
Si vuelves a leer tu mensaje original podras comprobar:
-Que nunca hablas de que se trate de un ejercicio de clase (siempre hablas de "mi juego").
-Que en ningun sitio especificas lo que puedes o no puedes usar.

Cuales son las limitaciones, no puedes usar el metodos split()? no puedes usar arrays? No vamos contigo a clase, por lo que no lo podemos adivinar.

Cita:
Aparte no estoy preguntando eso...
De nuevo, si vuelves a leer tu post comprobaras que tras mucho divagar en realidad no haces pregunta alguna

Cita:
el problema está en que siempre saca un error que pone: :huh: :huh: :huh:
[...]
lo que me gustaría que me ayudasen a detectar el problema,
El split soluciona tu problema.
Si lo que quieres es saber exactamente donde te esa dando el error, solo tienes que leer el mensaje de la excepcion: ahorcado.java, linea 72.

Un saludo
__________________
If to err is human, then programmers are the most human of us

Etiquetas: programa, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:26.