Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: jcol9s en 27 de Octubre 2020, 14:44
-
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:
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
-
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.
-
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:
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
-
: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í:
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;
}
}
-
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
-
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:
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:
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