Autor Tema: Java generar palabras aleatorias de número de letras establecido por el usuario  (Leído 6072 veces)

jcol9s

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Buenas necesito ayuda, ya que me falta algo pero no termino de saber como hacerlo.

He generado una palabra aleatoria de x letras pero sólo me aparece una y me deben aparecer el número de palabras que introduzca el usuario y no soy capaz de que me lo haga, llevo lo siguiente:

Código: [Seleccionar]
public class Main {

    public static void main(String[] args) {
   
        System.out.println("La palabra generada es: "+ GenerarPalabra());   
    }
       
public static String GenerarPalabra(){
//La variable palabra almacena el resultado final
         String palabra = "";
          Scanner teclado = new Scanner(System.in);
             
       System.out.println("Introduce el número de palabras que quieres que aparezcan: ");
        int num = Integer.parseInt(teclado.nextLine());

for (int i=0; i<num; i++){
      int codigoAscii = (int)Math.floor(Math.random()*(122 -
         97)+97); 

//para pasar el código a carácter basta con hacer un cast a char
         palabra = palabra + (char)codigoAscii;
         }
         return palabra;
     }
}


El metodo GenerarPalabra funciona pero sólo me genera una palabra y debe generarme las mismas palabras que pida el usuario inicialmente, si alguien me puede echar una mano se agradece.

Saludos
« Última modificación: 24 de Enero 2021, 13:51 por Alex Rodríguez »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re:Ayuda para ejercicio
« Respuesta #1 en: 27 de Octubre 2020, 23:48 »
La elección del usuario las estás usando para elegir cuántas letras tendrá la palabra.
Pero no para elegir cuántas palabras generar.

La pregunta al usuario puedes hacérsela en el main, y usas el valor que te de para hacer un bucle e invocar al método GenerarPalabra() tantas veces como indique ese valor.

Si haces esto, luego dentro del método te faltaría establecer como decidir cuántas letras tendrá la palabra.
Puedes usar otro valor random, entre 1 y 8 por ejemplo. Así cada palabra tendrá una longitud distinta.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

jcol9s

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re:Ayuda para ejercicio
« Respuesta #2 en: 28 de Octubre 2020, 16:30 »
Antes de nada agradecerte la respuesta, ya que me ha ayudado a desbloquearme un poco. A pesar de esto le he seguido dando vueltas para ver como podía quedar mejor. Ya lo tengo como me comentaste, lo único que cada vez que utiliza el método me pide la longitud de la nueva palabra a meter, que creo que no es que este mal pero pretendo algo como esto que voy a copiar:

Código: [Seleccionar]
public static void main(String[] args) {

         String palabra = "";
         Scanner teclado = new Scanner(System.in);
       
          System.out.println("Introduce el número de palabras que quieres que aparezcan: ");
        int num = Integer.parseInt(teclado.nextLine());
       
        for (int i= 0; i <num; i++){
 int codigoAscii = (int)Math.floor(Math.random()*(122 -
         97)+97); 
         

//para pasar el código a carácter basta con hacer un cast a char
            palabra = palabra + (char)codigoAscii;
         
       
         }
        for (int i= 0; i <num; i++){
           
        System.out.println(palabra);
           
        }
    }
}

El problema que me encuentro con esta forma, es que siempre me genera la misma palabra cuando lo que quiero es que me salgan palabras diferentes. Al imprimir por pantalla me salen las palabras que se indican con ese mismo numero de letras pero siempre es la misma cuando quiero que sean diferentes, me falta algo pero no sé como ponerlo. Crear diferentes variables no creo que sea la forma idonea, ya que entonces no pondría el numero de palabras que eligiera el usuario.

Gracias Kabuto por tu tiempo.

Saludos
« Última modificación: 24 de Enero 2021, 13:52 por Alex Rodríguez »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re:Ayuda para ejercicio
« Respuesta #3 en: 29 de Octubre 2020, 00:00 »
 :o ¡Oh!, ¿Por qué has prescindido del método generarPalabra?
En esencia era un buen método, solo había que retirarle la pregunta de cuántas palabras queremos generar y añadirle un nuevo valor Random para decidir al azar la longitud de las palabras que se generan.

Es decir, la lógica sería preguntar cuantas palabras queremos, y con este valor invocamos al método generarPalabra con un bucle tantas veces como haya indicado el usuario.
Como al método le habremos puesto un Random para decidir cuántas letras tendrá la palabra, nos mostrará palabras distintas en cada repetición.

Mira, el código podría quedar así:

Código: [Seleccionar]
public class Generador {

public static void main(String[] args) {

Scanner teclado = new Scanner(System.in);

System.out.println("Introduce el número de palabras que quieres que aparezcan: ");
int num = Integer.parseInt(teclado.nextLine());

for (int i = 0; i < num; i++)
System.out.println("La palabra generada es: "+ GenerarPalabra()); 

teclado.close();
}

public static String GenerarPalabra(){
//La variable palabra almacena el resultado final
String palabra = "";
//La longitud de la palabra la decidimos al azar
int longitud = (int)(Math.random() * 9) + 1;
//Generamos palabra
for (int i=0; i<longitud; i++){
int codigoAscii = (int)Math.floor(Math.random()*(122 -
97)+97);

//para pasar el código a carácter basta con hacer un cast a char
palabra = palabra + (char)codigoAscii;
}
return palabra;
}
}
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

jcol9s

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re:Ayuda para ejercicio
« Respuesta #4 en: 29 de Octubre 2020, 12:34 »
Gracias por la respuesta. En base a lo que me has pasado si quisiera un poco más rizar el rizo, estoy intentando cosas pero no termina de sailr, en base a lo que has puesto, si quisieramos que aparecieran el mismo numero de palabras que letras tenga la palabra, es decir, que aparezcan 5 palabras de 5 letras o 3 palabras de 3 letras cada una. En ese caso, el metodo generar palabra, no hace esta función, no? porque al usuario le pedimos introducir los datos fuera del método, por lo que la variable num, no funcionaría dentro del método generarpalabra(); ¿es así?

¿Como se podría implementar si quisieramos hacer esto? 5 palabras de 5 letras o 3 palabras de 3 letras. Que haya el mismo número de palabras que letras tenga dicha palabra.

Gracias Kabuto por la ayuda.

Saludos

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: Ayuda para ejercicio
« Respuesta #5 en: 30 de Octubre 2020, 00:52 »
Para ese caso, puedes pasarle al método como argumento el valor que nos ha dado el usuario y usarlo para la longitud de las palabras.

De hecho, para ver como funcionan ambas posibilidades, puedes "sobrecargar" ese método con esta variante que comentamos.

"Sobrecargar" un método/función en programación significa escribir una o más variantes de ese método, conservando el mismo nombre, pero cambiando los argumentos que va a recibir entre paréntesis, ya sea el tipo y/o la cantidad que recibe.

Así, el método GenerarPalabra tendrá dos variantes.
Una, no recibe ningún argumento, y entonces la longitud de las palabras se deciden al azar.

Otra, la longitud de las palabras se recibe como argumento, así que ahora ya no se emplea un Random para decidir la longitud

Este sería el código, con los dos métodos y en el main se invoca a ambos para ver la diferencia:
Código: [Seleccionar]
public class Generador {

public static void main(String[] args) {

Scanner teclado = new Scanner(System.in);

System.out.print("Introduce el número de palabras que quieres que aparezcan: ");
int num = Integer.parseInt(teclado.nextLine());

System.out.println("\nPalabras con longitud al azar:");
for (int i = 0; i < num; i++)
System.out.println("La palabra generada es: "+ GenerarPalabra());

System.out.println("\nPalabras con longitud: " + num);
for (int i = 0; i < num; i++)
System.out.println("La palabra generada es: "+ GenerarPalabra(num));

teclado.close();
}

public static String GenerarPalabra(){
//La variable palabra almacena el resultado final
String palabra = "";
//La longitud de la palabra la decidimos al azar
int longitud = (int)(Math.random() * 9) + 1;
//Generamos palabra
for (int i=0; i<longitud; i++){
int codigoAscii = (int)Math.floor(Math.random()*(122 -
97)+97);

//para pasar el código a carácter basta con hacer un cast a char
palabra = palabra + (char)codigoAscii;
}
return palabra;
}

public static String GenerarPalabra(int longitud){
//La variable palabra almacena el resultado final
String palabra = "";

//Generamos palabra
for (int i=0; i<longitud; i++){
int codigoAscii = (int)Math.floor(Math.random()*(122 -
97)+97);

//para pasar el código a carácter basta con hacer un cast a char
palabra = palabra + (char)codigoAscii;
}
return palabra;
}
}


En pantalla, tendríamos este resultado:
Citar
Introduce el número de palabras que quieres que aparezcan: 5

Palabras con longitud al azar:
La palabra generada es: vilcvoftx
La palabra generada es: pu
La palabra generada es: gycqn
La palabra generada es: ly
La palabra generada es: vtjb

Palabras con longitud: 5
La palabra generada es: qhhds
La palabra generada es: dmwfb
La palabra generada es: sloma
La palabra generada es: egnnx
La palabra generada es: qrhgd
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".