Título: juego de adivinar palabras en consola con 3 dificultades Publicado por: sheiking en 1 Octubre 2018, 04:33 am hola que tal estoy haciendo un programa que me adivine palabras y que tenga 3 dificultades pero no logro hacer que me lea las letras que escribo porque directamente me manda a la excepcion que puse en el codigo
esto es lo que llevo actualmente package adivinapalabras; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class AdivinarPalabras { public static BufferedReader entrada = new BufferedReader (new InputStreamReader(System.in)); private static Set correctas; String Facil[]= {"reir","hola","jugo","papa","pala","pasa","para","alma","nada","casa","mama","tele","mira","tela","bala","cera","tira"}; String Normal[]={"apretado", "avestruz","ceramica","estimulo","amarillo","eleccion","estrecho","invierno","chatarra","estrella"}; String Dificil[]={"indiscutible","participante","personalismo","perturbacion","contundencia","supervisamos","buscapleitos","vinculandose"}; public String generaPalabra(int Facil) { int n; n= (int)(Math.random()*4); if(Facil==0) return Normal[n]; else return Dificil[n]; } public boolean checarLetra (char letra,String palabra ) { boolean mensaje=false; for(int i=0;i<palabra.length();i++) { if(letra==palabra.charAt(i)) { mensaje = true; break; } } return mensaje; } public Set letrasPalabra(String palabra) { Set letras = new HashSet(); for (int i=0;i<palabra.length() ;i++) { if(palabra.charAt(i) != ' ') { letras.add(palabra.charAt(i)); } } return letras; } public String actualizaVisible(Set correctas, String palabra, String visible) { visible =""; boolean bandera = false; Iterator it = correctas.iterator(); for(int i=0; i<palabra.length() ;i++) { while(it.hasNext()) { char a = it.next().toString().charAt(0); System.out.println(" "+a+" "+palabra.trim().charAt(i) ); if ( a == palabra.trim().charAt(i) ) { visible += a; bandera = true; break; } } if (bandera == false) { visible += "_"; } bandera=false; it = correctas.iterator(); } return visible; } public static void main(String[] args) throws Exception { System.out.println("Establezca el nivel de dificultad: "); System.out.println("Facil(f)"); System.out.println("Normal(n)"); System.out.println("Dificil(d)"); String dificultad = entrada.readLine(); switch(dificultad) { case "f": AdivinarPalabras Operacion = new AdivinarPalabras (); Operacion.generaPalabra(1); System.out.println("Palabra generada: ****"); System.out.println("teclea una letra de la palabra"); String letra = entrada.readLine(); char l=letra.charAt(0); try { Operacion.checarLetra(l, letra); Operacion.letrasPalabra(letra); Operacion.actualizaVisible( correctas,letra,letra); } catch(Exception ex) { System.out.println("No introdujo una letra valida "+ex.getMessage()); } case "n": } } } (http://[img][img][img][img][img][img][img][img])[/img][/img][/img][/img][/img][/img][/img][/img] Título: Re: juego de adivinar palabras en consola con 3 dificultades Publicado por: rub'n en 2 Octubre 2018, 01:16 am Hola,
no veo el log por lo visto es NPE nullPointerException claro private static Set<String> correctas; a punta a null instancia la variable de clase, "clase" porque la tienes con static Código usa operador diamante <> de generics Código
siempre dará falso porque se compara 1==0 que es falso retornando un valor random del array Difícil creo que mejor es así, Código
donde Código para generar un numero aleatorio contenido en el largo del array fácil , y menos 1 para evitar Código
facil tiene 17 elementos, si cae 18 daría error xq el array no es de ese tamaño pero con -1 nunca caera 18 XD Código método checarLetra creo que debería comparar aquí pero con la palabra que se genera de manera aleatoria con el método generaPalabra que la retorna Código
si la palabra aleatoria es tela si se introduce X debería retornar false, porque x no esta en la palabra "tela" Código
xq si lo dejas como lo tienes siempre dará true ya que compará siempre el carácter introducido con la palabra que tecleas Aquí como parámetro dices palabra e introduces una letra ? XD o quizás dices, que cada letra correcta sea añadida al Set ? Código
Que deseas que haga actualizaVisible me imagino que si la letra introducida esta contenida en la palabra generada, que se reemplace el asterisco por la letra algo así ? Código
Código
|