Java - Ayuda con ejercicio para generar array aleatorio de char

   
Vista:

Ayuda con ejercicio para generar array aleatorio de char

Publicado por Hugo (1 intervención) el 02/07/2017 10:30:30
Hola. Me puse a hacer mi propia versión de un ejercicio para experimentar, y no consigo ver donde falla el método.
La idea es que el método genere diez palabras aleatorias con los char que se le introducen como argumento. Recibe la longitud del array y el rango de valores aceptados a través de ventanas JOptionPane, en lugar de como argumentos del método. Según la longitud indicada, saldrán tantas ventanas JOptionPane para introducir los char del rango aceptado.
El problema es que sólo me guarda la última cadena de caracteres que recibe. Y no consigo ver el fallo.

Gracias de antemano por vuestra ayuda. Un saludo.


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
public static char[] crea_palabra(){ //Método para generar cadenas de caracteres aleatorios
        String array;
        char []s;
        int longitud=Integer.parseInt(JOptionPane.showInputDialog("Introduce la longitud de la matriz"));
        char []p=new char[longitud];
        for(int k=0;k<longitud;k++){
            array=JOptionPane.showInputDialog("Introduce un caracter");
            s=array.toCharArray();
 
            for(int h=0;h<s.length;h++){
                  p[h]=s[h];
            }
 
        }
        char[] palabra=new char[longitud];
        int j=0;
        while(j<10){
            for(int i=0;i<longitud;i++){
                palabra[i]=p[(int)(Math.random()*longitud)];
            }
            j++;
            System.out.println(palabra);
        }
        System.out.println("");
        return palabra;
    }
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
Imágen de perfil de Jose

Ayuda con ejercicio para generar array aleatorio de char

Publicado por Jose (46 intervenciones) el 06/07/2017 22:57:17
Hola como estas.

resumamos que tu aplicacion lo que hace es al inicio formar un alfabeto letra a letra.
y es ahi donde cometes el error,tanto de logica como de programacion.

de logica porque, tu quieres que primero el usuario te diga cuantos caractes va introducir y luego le pides que
te diga cuales van hacer, no es más sencillo que te diga cuales son y de ahi deduces cuantos son?

No se si en este punto te he entendido bien porque hablas de rango que cuando lo que pides es un solo caracter.

bueno ahora de programación hay dos fallos, a pesar que tu idea original con tu titulo es que el usuario agregue solo
un carácter, el usuario puede agregar cuantos quiera e introducirte el fallo que agregue mas caracteres que los que te indico
es decir en términos de tus variables s puede ser mas grande que p y traerte problemas.

El segundo y por el cual haces la pregunta, es que los caracteres introducidos por el usuario siempre se ingresa en p desde la posicion 0.
y por eso siempre estas remplazando el anterior.

este es tu codigo
for(int k=0;k<longitud;k++){
array=JOptionPane.showInputDialog("Introduce un caracter");
s=array.toCharArray();

for(int h=0;h<s.length;h++){//aqui esta el fallo h siempre inicia en 0.,replazando los caracteres anteriores
p[h]=s[h];
}

}

//siguiendo tu logica, te propongo el siguiente parche.


for(int k=0;k<longitud;k++){
array=JOptionPane.showInputDialog("Introduce un caracter");
s=array.toCharArray();

if(s.length>0{
p[k]=s[0];//como solo necesitas un caracter, tomas el primero y si existen más solamente los desprecias.
}else{
p[k]=' ';//caracter vacio si el usuario no especifica un caracter
}



}

si realmente lo que queres es que se ingrese palabras, y no solo caracter a caracter, entonces el algoritmo es un poco distinto.

bueno ya para finalizar el código tiene tela y se puede mejorar, pero con esa corrección obtendrás el resultado esperado, o el que yo te comprendi.

saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Ayuda con ejercicio para generar array aleatorio de char

Publicado por Hugo (1 intervención) el 08/07/2017 12:00:26
Hola Juan, gracias por tu respuesta.
Con rango me refiero a todas las letras introducidas por el usuario, con las cuales formar después las palabras. Aunque solo pido una letra de cada vez, el total de letras introducidas formarían el rango y sólo con ellas se podrán formar las palabras. Esto lo saqué del enunciado del ejercicio.

Lo de pedir primero la longitud del array, es porque todavía no sé capturar el valor de cerrar una ventana .showInputDialog sin introducir un valor(o lo que haga el usuario cuando no quiera introducir más letras). Cuando lo sepa hacer, está claro que tiene más lógica hacerlo como tu dices.

Gracias por tu respuesta, me sirvió para entender donde cometía el fallo.
Un saludo.
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
Revisar política de publicidad