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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Hola tengo un bug haber si me pueden ayudar!!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Hola tengo un bug haber si me pueden ayudar!!  (Leído 2,308 veces)
IsmaelBFH

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Hola tengo un bug haber si me pueden ayudar!!
« en: 23 Noviembre 2015, 12:07 pm »

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);
       
}
}


En línea

0xFer


Desconectado Desconectado

Mensajes: 400



Ver Perfil
Re: Hola tengo un bug haber si me pueden ayudar!!
« Respuesta #1 en: 23 Noviembre 2015, 16:13 pm »

El error aparece cuando no se cuentra a la palabrapulsada desde la posición longit+1 de la palabra;

Código
  1. longitud=palabra.indexOf(letrapulsada, longit+1);

Si no se encuentra entonces longitud vale -1 pero no pones un condicional para saber si se ha encontrado la palabrapulsada y lo utilizas después en;

Código
  1. cadenavacia2=cadenavacia.substring(0,longitud);



En línea

Código
  1. int getRandomNumber(){
  2.    return 4; //chosen by fair dice roll
  3.              //guaranteed to be random
  4. }
IsmaelBFH

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Hola tengo un bug haber si me pueden ayudar!!
« Respuesta #2 en: 23 Noviembre 2015, 19:16 pm »

Sii ya solucioné algo, lo puse en un condicional, pero si pongo una palabra como por ejemplo CAMISETA y pongo la A me saca primero
-A-----
Y en la siguiente linea:
-A-----A
pero yo solo quiero que entre en un if o en otro, no en los dos:

Código:
package ej01;

import java.util.*;

public class ahorcado {

public static void main(String[] args) {
int intentos,dato1,s,c=0,i,t,longit,longitud,l,cont1=0,cont2=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);
        
         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+"-";
        
         }
        
  
        }
        
        
         }
                cadenavacia=cadenavacia.substring(0,palabra.length()-1);
         longit=palabra.indexOf(letrapulsada);//posicion de esa letra
        
         if(palabra.indexOf(letrapulsada,longit)>=0){
        
         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);
         System.out.println("Estas en el intento "+intentos);
        
         }
         if (palabra.indexOf(letrapulsada,longit+1)>=0){
        
     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);
         }
         }
        
        
}
}

Haber si pueden ser ustedes tan amables de sacarmelo que ando ya muy perdido..
Y para ir completando la palabra y que se me guarde?
« Última modificación: 23 Noviembre 2015, 19:20 pm por IsmaelBFH » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Hola! me pueden ayudar?
Diseño Gráfico
chibihacker 3 2,590 Último mensaje 25 Abril 2005, 06:48 am
por Morris
Hola amigos me pueden ayudar con java.
Java
LordWilliam 1 2,166 Último mensaje 29 Junio 2012, 05:53 am
por goll9d
Hola me pueden ayudar a entender esta imagen
Foro Libre
||Toxic|| 4 3,993 Último mensaje 9 Septiembre 2012, 21:10 pm
por -- KiLiaN --
Hola !!! me pueden ayudar a comentar un codigo que no entiendo en c++
Programación C/C++
Franck_Javi13 1 2,551 Último mensaje 10 Diciembre 2013, 15:50 pm
por Sputnik_
hola me pueden ayudar? con esto
Hacking
nightcode 3 3,789 Último mensaje 17 Mayo 2018, 14:06 pm
por nightcode
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines