Java - Ayuda para remplazar un caracter String

 
Vista:

Ayuda para remplazar un caracter String

Publicado por alejandro (9 intervenciones) el 01/05/2015 19:14:08
Buenas a todos, esta vez necesito vuestra ayuda para hacer un algoritmo que haga que juegue al ahorcado, el programa tiene un modo facil y otro dificil, de momento solo quiere hacer el facil y para ello os necesito.
mi codigo hace que insertes la palabra con una clase leer q tengo q no viene mucho al caso,
entonces introduces hola, aparece ****, inroduzco la h, y me sale: h****, cuando quiero que haga h***, tambien el problema que tengo es que cuando introduzco una h, y luego otra h, pues me saldria hh****, porque? por que comparo si esa letra existe en la palabra secreta y lo da por valida y lo pone, pero no tengo una idea clara de hacerlo de otra forma....

dejo aqui el codigo y aver si alguien me puede ayudar pro que estoy echo un lio....

El problema esta entre lineas 62-69, para no haceros leer todo... gracias

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import java.util.ArrayList;
//Autor: Alejandro Villapol
public class Practica6Ahorcado {
 
    public static void main(String[] args) {
        //Entorno
            ArrayList<Character>intentos=new ArrayList<Character>();
            String secreta;
            String letra;
            boolean encontrado;
            char primeraLetra;
            int fallos;
            short nivel;
            String palabra;
        //Algoritmo
            fallos=0;
            do{
                System.out.println("Nivel 1.- Facil");
                System.out.println("Nivel 2.- Dificil");
                System.out.print("Elige opción: ");
                nivel=Leer.datoShort();
            }while(nivel<1||nivel>2);
            //Fácil:
            palabra = "";
            primeraLetra=' ';
            if(nivel==1){
             do{
                System.out.println("Introduzca la palabra secreta sin espacios)");
                secreta = Leer.dato();
                secreta=secreta.toLowerCase();
             }while(secreta.contains(" "));
             for(int i=0; i<secreta.length();i++){
                 palabra=palabra + "*";
              }//Fin Para
 
             System.out.println("Palabra a adivinar: "+palabra);
 
                while(fallos<10 && !secreta.contains("*")){
                    do{
                        System.out.println("Introduzca una letra");
                        letra=Leer.dato();
                        letra=letra.toLowerCase();
                        primeraLetra=letra.charAt(0);
                    }while(primeraLetra<'a' || primeraLetra >'z');
 
                    //Comprobar letra en la palabra secreta
                    encontrado=false;
                    for(int i = 0; i<secreta.length();i++){
                        if(secreta.charAt(i)==primeraLetra){
                            encontrado=true;
                        }//Fin Si
                    }//Fin Para
 
                    if(!encontrado && !intentos.contains(primeraLetra)){
                        intentos.add(fallos,primeraLetra);
                        fallos++;
                    }//Fin Si
 
                    System.out.println(intentos);
                    System.out.println("Fallos :"+fallos);
 
                    for(int i=0;i<secreta.length();i++){
                        if(secreta.charAt(i)==primeraLetra){
                          palabra=palabra.substring(0,i) + primeraLetra + palabra.substring(i,palabra.length());
                          //error//   palabra.replaceFirst("*","");
                        }//Fin Si
                    }//Fin Para
                    System.out.println(palabra);
             }//Fin Mientras
 
                if(fallos==10){
                    System.out.println("Perdiste, la palabra era: "+secreta);
                    System.out.println("Prueba suerte la proxima vez!");
                }else{
                    System.out.println("Has ganado, enhorabuena");
                }//Fin Si
 
            }else{ //Fin (Nivel Facil)
                //Nivel Dificil
 
                //Completar...
            }
    }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 22
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Ayuda para remplazar un caracter String

Publicado por nelson (9 intervenciones) el 01/05/2015 22:45:58
CONSEJO
para diseñar software siempre y para siempre aprendelo debes planificar y describir como trabajara o procesara la informacion tu software es decir no puedes hacer codigo y esperar q la solucion te vaya saliendo de la cabeza o tal cual consulta alguien te ayude sin una planificacion, es mas suponte esta situacion "alguien desea construir una casa, y comienza a colocar bloques y cemento pero sin un plano que terminara.. quien sabe, porq ni esa persona podra determinar porq termino algo q no planifico.. dicho esto espero te quede mas que claro ese aspecto

primero descripcion e identificacion del problema

el juego ahorcado tiene algo para pensar que sera?????
como adivinar la letra o letras faltantes
que debe hacer el programa ante un fallo de letra es decir cuando no sea la correcta
debe mostrarsele al usuario ayuda o pistas para encontrar la letra?
que sucede cuando al fin coloque toda las letras correctas
cuantos intentos tiene permitido el programa permitirle al usuario antes de indicar la falla o dibujar el ahorcado
cuantos niveles de dificultad ?
como diferenciar los niveles que hacer en un nivel q en el otro no deba hacer o mostrar??

segundo planificacion de desarrollo
iniciar una cadena con la plabra correcta
iniciar una cadena que guardara las letras ingresadas por el usuario
inciiar una cadena con el mensaje de fallo en intento -> letra invalida,etc
iniciar una cadena con el mensaje de fallo en todos los intentos
iniciar cadena de exito de palabra correctamente armada ,etc
iniciar mensaje de ayuda para nivel facil
iniciar variable para variable de case para los niveles 1,2,3,...
programar un metodo para validar las letras
programar metodo para buscar letra en palabra indicada
programar metodo q inicie el programa con menu para seleccionar nivel de dificultad
....
.
.
.
.
.
fin de programa por falla o por exito


la programacion es sencilla siempre q planificques tu meta o producto
en ing informatica o sistemas te enseñan que la planificacion es lo mas importante antes del desarrollo y por ende ganas mas dinero como planificador que como programador no obstante debes hacerlo tu mismo para q aprendas no tiene chiste hacerte un codigo q solo entregaras sin aprender.

El exito consiste en fallar para aprender y asi alcanzar la meta y por ende tu exito

suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 349
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda para remplazar un caracter String

Publicado por Andrés (340 intervenciones) el 02/05/2015 00:00:01
Mmm demasiado lio, revisa el siguiente ;)

ahorcado
ahorcadomain
ahorcado_test

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package ahorcado;
 
/**
 *
 * @author Andrés Mella Romero
 */
public class Ahorcado {
 
    //Caracter para masking
    public final static char MASK_CHAR = '*';
    //Palabra para adivinar
    private String palabra;
 
    //método que obtiene la palabra
    public String getPalabra() {
        return palabra;
    }
 
    //método que establece la palabra
    public void setPalabra(String palabra) {
        this.palabra = palabra;
    }
 
    //metodo que descubre nuevos caracteres
    public String getSecret(String palabraDescubierta, char caracter) {
 
        //inicialmente no hemos descubierto la palabra, asi que hay que construir 
        //una cadena con todos los caracteres * (masking)
        if (null == palabraDescubierta) {
 
            //Contruimos un StringBuilder para ir agregando *
            StringBuilder sb = new StringBuilder();
 
            //por cada caracter en la palabra original, agregar un *
            for (int i = 0; i < palabra.length(); i++) {
                sb.append(MASK_CHAR);
            }
 
            //regresar el string armado en el StringBuilder
            return sb.toString();
 
        }
 
        //Así que... ya tenemos una una palabraDescubierta!
        //obterner la palabra a adivinar y la parabra descubierta al momento como
        //arreglo de caracteres
        char[] palabraChar = palabra.toCharArray();
        char[] palabraDescubiertaChar = palabraDescubierta.toCharArray();
 
        //por cada caracter en la palabra original, averiguar si dscubrimos un
        //nuevo caracter
        for (int k = 0; k < palabraChar.length; k++) {
            //Esta el caracter en la palabla a adivinar?  
            if (palabraChar[k] == caracter) {
                //descubrirlo!   
                palabraDescubiertaChar[k] = caracter;
 
            }
 
        }
 
        //regresar el arreglo con los descubrimientos
        return String.valueOf(palabraDescubiertaChar, 0, palabraDescubiertaChar.length);
 
    }
 
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package ahorcado;
 
import java.util.Scanner;
 
/**
 *
 * @author Andrés Mella Romero
 */
public class AhorcadoMain {
 
    public static void main(String[] args) {
        //crea una instancia de... Ahorcado
        Ahorcado ahorcado = new Ahorcado();
        //establecer la palabra a adivinar
        ahorcado.setPalabra("Hola");
        //este es mi número de intentos para adivinar
        int intentos = 4;
        //scanner... obtendra la entrada del teclado
        Scanner scanner = null;
 
        //obtener la palabra secreta, inicialmente contiene solo *
        String palabraSecreta = ahorcado.getSecret(null, Ahorcado.MASK_CHAR);
        //inprime la parabra sescreta
        System.out.println("Palabra sercreta: " + palabraSecreta);
 
        try {
 
            //instanciar el scanner que leerá del teclado
            scanner = new Scanner(System.in);
 
            //agotar los intentos
            for (int i = 0; i < intentos; i++) {
                //solicitar una letra 
                System.out.print("Letra: ");
                //solo necesitamos el primer caracter de la entrada
                char character = scanner.next().charAt(0);
                //obtener la nueva palabla con los caracteres descubiertos
                palabraSecreta = ahorcado.getSecret(palabraSecreta, character);
                //imprimir la nueva palabra
                System.out.println("Avance: " + palabraSecreta);
            }
 
            //agotamos los intentos y aún existen cracteres *?
            if (palabraSecreta.indexOf(Ahorcado.MASK_CHAR) >= 0) {
                //Uy no ganó
                System.out.println("Mejor suerte para la próxima");
            } else {
                //Tiene un diccionario en la cabeza!
                System.out.println("Suertudo!. Ganaste!!!");
            }
 
        } catch (Exception e) {
 
        } finally {
            if (null != scanner) {
                scanner.close();
            }
        }
 
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda para remplazar un caracter String

Publicado por alejandro (9 intervenciones) el 03/05/2015 12:44:09
Nelson, te doy toda la razón, mi profesora siempre nos recuerda lo mismo respecto a la metáfora de la casa... pero me cuesta adaptarme a eso, estoy en un FP primer año.

Andres muchisimas gracias, se vé mucho mas claro, pero claro, no me dejan usar muchas cosas como el try catch, y
el builder y muchos otros metodos... tengo que apañarme con lo que sé de momento limitarme a eso...

Pero me ha ayudado a tenerlo mas claro, y nelson igual.
gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar