Java - Como mostrar "Al azar"

 
Vista:
sin imagen de perfil
Val: 8
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Como mostrar "Al azar"

Publicado por Francisco (4 intervenciones) el 17/03/2020 07:38:26
Hola comunidad!

Estoy haciendo un programa en el cual yo ingreso nombres y los necesito mostrarlos al azar.
Ejemplo:
Ingreso 3 nombres:
Raul
Maria
Jose
Los nombres a mostrar en forma al azar:
Maria
Jose
Raul
Es decir no necesariamente que me los muestre como en el orden en que yo lo escribi
Como seria eso?
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

Como mostrar "Al azar"

Publicado por Kabuto (1381 intervenciones) el 17/03/2020 17:52:28
Primero has de guardar los nombres en un array, una lista, o lo que sea...

Una vez guardados en una de esas estructuras, puedes acceder a ellos mediante un indice.

Si tienes por ejemplo tres nombres en un array:

Raul || Maria || Jose

Cada uno tiene un índice asignado, comenzando desde el 0

[0] || [1] || [2]

Pues con la clase Random, y dentro de un bucle, puedes generar números al azar entre 0 y 3 y mostrarlos según los indices aleatorios se van generando.

El problema, es que al ser aleatorio, los indices se pueden repetir. Puede que primero te genere el [2] y luego dos veces seguidas el [1], y luego otra vez el [2] y ya por último el [0]

Así que hay que pensar en una forma para descartar los indices que ya han sido mostrados, así como controlar cuándo han sido ya mostrados todos los nombres para poner fin a la generación de números al azar.


Inténtalo, comienza un código, aunque no esté completo y lo único que haga sea leer nombres y guardarlos.

Y a partir de ahí te ayudamos a completarlo.
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
Val: 8
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Como mostrar "Al azar"

Publicado por Francisco (4 intervenciones) el 19/03/2020 05:15:18
Buenas noches, disculpa la tardanza estoy con los estudios de Universidad!
Este es el código que yo he hecho, he podido hacer el vector, guardar 5 nombres y mostrar los 5 nombres, pero lo que quiero es que los muestre al azar, espero que se pueda comprender.

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
package equiposalazar;
 
import java.util.Scanner;
 
public class NombresalAzar {
 
    public static void main(String[] args) {
      int i;
 
        Scanner in = new Scanner(System.in);
        String nombre[] = new String[5];
 
        for (i=0; i<5; i++){
            nombre[i] = in.nextLine();  //Aca hay que ingresar/scanear los 5 nombres
        }
 
        System.out.println("Los nombres son: ");
 
        for (i=0; i<5; i++) {
 
            System.out.println(nombre[i]); //Muestra los 5 nombres que ingresamos anteriormente
        }
 
}
}

Gracias por responder!!

Aclaro, lo estoy haciendo todo en el programa principal, después le daré clases y objetos pero por ahora necesito entender ese razonamiento de mostrar al azar por asi decirlo
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
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

Como mostrar "Al azar"

Publicado por Kabuto (1381 intervenciones) el 19/03/2020 11:53:10
Perfecto.

A tu código le añado unas líneas más que lo que harán es desordenar el array/vector y volver a mostrarlo.

Si algo no entiendes pregunta.

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
public class NombresalAzar {
 
	public static void main(String[] args) {
		int i;
 
		Scanner in = new Scanner(System.in);
		String nombre[] = new String[5];
 
		for (i=0; i<5; i++){
			nombre[i] = in.nextLine();  //Aca hay que ingresar/scanear los 5 nombres
		}
		in.close();
 
		System.out.println("Los nombres son: ");
 
		for (i=0; i<5; i++) {
 
			System.out.println(nombre[i]); //Muestra los 5 nombres que ingresamos anteriormente
		}
 
		//Cambiamos orden de los nombres al azar
		Random r = new Random();
		for (i=0; i<5; i++) {
 
			int posAleatoria = r.nextInt(5);
			//Hacemos copia del nombre actual
			String temp = nombre[i];
			//En la posicion actual ponemos el nombre de la posicion random
			nombre[i] = nombre[posAleatoria];
			//En la posición random, ponemos la copia del nombre actual
			nombre[posAleatoria] = temp;
		}
 
		//Array desordenado, volvemos a mostrar
		System.out.println("\nLos nombres desordenados son: ");
 
		for (i=0; i<5; i++) {
 
			System.out.println(nombre[i]); //Muestra los 5 nombres que ingresamos anteriormente
		}
 
	}
 
}
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
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como mostrar "Al azar"

Publicado por Rodrigo (623 intervenciones) el 19/03/2020 13:33:47
Una alternativa es usar Random para calcular el indice donde ingresar el string leido, en vez de desordenarlo despues.
En ese caso, hay que mantener una manera de no repetir el indice. Una posibilidad es tener un arreglo con los indices disponibles e irlos "gastando" de a 1.
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
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como mostrar "Al azar"

Publicado por Billy Joel (875 intervenciones) el 19/03/2020 15:14:10
Yo lo resuelvo 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
import java.util.Random;
import java.util.Scanner;
 
/**
 *
 * @author billy.johnson
 */
public class NombresAlAzar {
 
    /**
     * Devuelve un número aleatorio entre los límites
     *
     * @param min
     * @param max
     * @return
     */
    public static Integer getRandomNumber(int min, int max) {
        return new Random().nextInt(max - min + 1) + min;
    }
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String nombres = "";
        boolean continuar = true;
        while (continuar) {
            System.out.print("Introduce un nombre: ");
            nombres += sc.nextLine() + ";";
            System.out.print("Introduce el número uno (1) para agregar mas nombres: ");
            continuar = sc.nextLine().equals("1");
        }
        String[] vector = nombres.split(";");
        //String[] vector = {"Manuel", "Victor", "Cristian", "Billy"};
        Integer r;
        String vistos = "";
        for (int i = 0; i < vector.length; i++) {
            r = getRandomNumber(0, vector.length - 1);
            //System.out.println(r);
            if (vistos.contains(r.toString())) {
                i--;
            } else {
                vistos += r + " ";
                System.out.println(r + ": " + vector[r]);
            }
        }
    }
}

Saludos,
Billy Joel
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
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Como mostrar "Al azar"

Publicado por Rodrigo (623 intervenciones) el 20/03/2020 15:24:26
Billy, este codigo tiene un error y se presenta cuando hay mas de 10 elementos, aun no ha salido el indice 1 y si ha salido un indice >= 10.
La linea 38 chequea si es que el numero elegido en la linea 36 ya ha aparecido.
Si hay mas de 10 elementos y ya ha salido algun numero mayor o igual que 10, va a ser imposible elegir el indice 1, pues contains() dira que 1 ya ha sido elegido (por aquellos indices >= 10)

Dicho de otra forma, si vistos tiene esto:
"5 7 11"
el indice 1 no puede elegirse pues contains() dira que 1 ya esta en el string vistos.
Si vistos contiene "12"
los indices 1 y 2 no pueden elegirse, etc.
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