Java - Palabras desordenadas para digitarlas de forma ordenada

 
Vista:
sin imagen de perfil

Palabras desordenadas para digitarlas de forma ordenada

Publicado por Oscar (2 intervenciones) el 19/08/2022 04:32:25
Hola ! Me pueden ayudar con este ejercicio:

Se debe de ir mostrando en pantalla palabras desordenadas para
que el usuario las digite de forma ordenada

El programa va a tener guardabas las palabras de forma correcta. Debe de tener
como minimo 8 palabras y escoger las que se van a mostrar de forma aleatoria

Cada vez que el sistema toma una palabra, debe desordenar al azar el orden de
las letras y mostrarlas al usuario para que éste escriba correctamente la palabra
a la que se refiere. En total se va a mostrar 5 palabras diferentes al usuario

Cada vez que el usuario digita la palabra, el sistema le indica si está correcta o
incorrecta y le muestra la siguiente palabra desordenada. Al final, se le debe
indicar al usuario la cantidad de palabras acertadas y las que no

Ejemplo:
El sistema va a tener guardada la palabra trailer, pero muestra la palabra r l e i r t a
para que el usuario escriba de forma ordenada la 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 Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Palabras desordenadas para digitarlas de forma ordenada

Publicado por Kabuto (1381 intervenciones) el 19/08/2022 17:56:15
Tanto para escoger palabras al azar (de una lista), como para escoger caracteres (de una palabra), puedes construir primero un ArrayList con los índices correspondientes a cada palabra/letra.

La lista de palabras puedes crearla con un array primitivo.
Si tienes 8 palabras, tendrás 8 índices que van del 0 al 7 y cada uno apunta a una palabra.
Pues bien, esos índices del 0 al 7 los metes en un ArrayList y luego, con un objeto Random vas extrayendo al azar un índice.
Al extraerlo, lo utilizas para elegir una palabra y además queda eliminado del ArrayList, así evitas elegir dos veces el mismo índice.

Para elegir al azar, le decimos al Random que nosde un entero entre 0 y lo que mida el ArrayList, que cada vez medirá menos pues vamos extrayéndole elementos.


El proceso para desordenar una palabra sería exactamente el mismo, solo que en lugar de usar los índices para elegir elementos de un array primitivo, los usaremos para elegir caracteres de un String, pues también están numerados con índices desde 0 hasta lo que mida la palabra.

Para organizar mejor el código, el proceso de desordenar una palabra se puede hacer en un método separado, que reciba una palabra como argumento y la imprima desordenada.

Una vez impresa, preguntamos al usuario cuál es la palabra, comprobamos si acierta y aumentamos o no un contador de aciertos.

El código podría quedar así:

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
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
 
public class Desordena {
	//Objeto Random para hacer selecciones al azar
	private static Random azar = new Random();
	//Lista de PALABRAS para adivinar
	private static final String[] PALABRAS = new String[] {
			"TRAILER", "BATIDORA", "AVIONETA", "MERCADER",
			"OBLICUO", "CIRIO", "VELETA", "BANDERA"
	};
 
	public static void main(String[] args) {
 
		Scanner teclado = new Scanner(System.in);
		int aciertos = 0;
		/*
		 * Para escoger palabras al azar, construimos un
		 * ArrayList con los índices existentes en el array
		 * de PALABRAS.
		 * Luego con un Random, eliminaremos índices al azar de
		 * ese ArrayList y los usaremos para escoger palabras
		 */
		ArrayList<Integer> indices = new ArrayList<Integer>();
		for (int i = 0; i < PALABRAS.length; i++)
			indices.add(i);
 
		//Mostraremos 5 PALABRAS al azar
		for (int i = 1; i <= 5; i++) {
			System.out.println("\n\tPALABRA #" + i);
			int indice = indices.remove(azar.nextInt(indices.size()));
			String palabra = PALABRAS[indice];
			desordena(palabra);
			System.out.print("\n¿Qué palabra es?: ");
			String respuesta = teclado.nextLine();
			if (respuesta.equalsIgnoreCase(palabra)) {
				System.out.println("¡Correcto!");
				aciertos++;
			}
			else
				System.out.println("¡Incorrecto!");
		}
 
		//Resultados
		System.out.println("\nAciertos: " + aciertos);
		System.out.println("\nFallos: " + (5 - aciertos));
		teclado.close();
		System.out.println("\n\t\tFIN DE PROGRAMA");
 
	}
 
	private static void desordena(String palabra) {
		//Construimos un ArrayList con los índices
		//existentes para cada caracter de la palabra
		ArrayList<Integer> indices = new ArrayList<Integer>();
		for (int i = 0; i < palabra.length(); i++)
			indices.add(i);
		/*
		 * A continuación, elegimos índices al azar
		 * para escoger que caracter imprimimos en pantalla.
		 * Cada vez que escogemos un índice, lo eliminamos
		 * del ArrayList para evitar escoger dos veces un mismo
		 * índice.
		 * El proceso termina cuando el ArrayList se quede vacío
		 */
		while(!indices.isEmpty()) {
			int indice = indices.remove(azar.nextInt(indices.size()));
			System.out.print(palabra.charAt(indice) + " ");
		}
	}
 
}
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
sin imagen de perfil

Palabras desordenadas para digitarlas de forma ordenada

Publicado por Oscar (2 intervenciones) el 21/08/2022 00:54:35
Genial ! Muchas gracias tio !
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