Android - Seleccion aleatoria usando array String

 
Vista:
sin imagen de perfil
Val: 197
Plata
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

Seleccion aleatoria usando array String

Publicado por Luis (97 intervenciones) el 17/11/2016 00:20:52
Hola a todos de nuevo.

Primero quiero agradecerle que se aya detenido en leer este post y disculpe si es extenso pero me gusta expresarme con claridad.

Intento dar un pasito mas con su ayuda.

Trato hacer una seleccion aleatoria como dice el titulo del post sin que se repita ningun elemento y segun he leido se puede utilizar el método Array.splice() que obtiene elementos de un Array eliminándolos de la matriz.

Pero yo no quiero que se eliminen de la matriz ya que posteriormente quiero poder reiniciar y seleccionar aleatoriamente otra vez y si se han borrado no sera posible.


Yo lo he echo de la siguiente manera que funciona bien, pero no creo que sea la manera mas adecuada ya que abro y cierro una base de datos demasiadas veces para comprobar si ya ha sido utilizado.

Le agradeceria alguna sujerencia de como simplificarlo.

Los nombres que utilizo para llamar a los metodos(); son muy identificativos ya que como muy muevo que soy lo hago asi para no perderme con el tiempo ire acortandolos.
Por favor no se rian.
Valeee siii, un poco si pueden.


Este es el array Strings que tengo declarado en la activity;

1
2
3
4
5
6
7
String[] ciudades = {
 
            "Alicante",
            "Valencia",
            "Toledo",
            "San Sebastian",
            "Castilla la mancha"};

Este es el metodo que se ejecuta al pulsar el boton de iniciar la seleccion aleatoria;

1
2
3
4
5
6
7
bt_START.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
 
                iniciorunSeleccionAleatoria();
            }
        });

A continuacion inicio el runable.run() quiero que se muestren todas las ciudades contenidas en el array String en un textview y despues se seleccione una aleatoriamente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void iniciorunSelecionAleatoria(){
 
        rando = (int) (Math.random() * 10);
        repeticiones = 0;
        runnable.run();
 
    }
 
 Handler handler = new Handler();
    Runnable runnable = new Runnable() {
        public void run() {
 
            empiezaLaSeleccion();
 
        }
    };


Comienza la seleccion aleatoria


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public void empiezaLaSeleccion() {
 
        if (contador < ciudades.length - 1) {
 
            resultadociudad.setText(ciudades[contador]);
            contador++;
            handler.postDelayed(runnable, 1);
 
 
        } else {
 
            contador = 0;
 
            resultadociudad.setText(" " + ciudades[rando]);
            handler.removeCallbacks(runnable);
 
            // Llamo al metodo comprovar para comprovar ha salido anteriormente la ciudad
 
            metodo_comprovar_ciudad_libre();
 
        }
    }


Metodo para comprovar si ha salido la ciudad en alguna ocasion.

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
private void metodo_comprovar_ciudad_libre(); {
 
 
         DBciudades db = new DBciudades(getApplicationContext(), null, null, 1);
        String buscar = resultadociudad.getText().toString();
        String[] datos;
        datos = db.buscar_ciudad(buscar);
 
        if (datos[0]== null) {
 
            Toast.makeText(getApplicationContext(), " Ciudad Si disponible FIN DEL SORTEO", Toast.LENGTH_SHORT).show();
 
            // Llamo al metodo guardar para ingresar la ciudad en la base de datos.
 
            guardarendb();
 
        } else {
 
            // Si ya existe en la base de datos comenzamos de nuevo la seleccion aleatoria 
//y para ello llamamos nuevamente al metodo iniciorunSeleccionAleatoria();
// y asi estaremos repitiendo hasta que salga una ciudad que no este en la base de datos
// y podamos quedarnos en el if{ } y llamar a guardar(); 
 
            Toast.makeText(getApplicationContext(), " Ciudad ya utilizada, Repetimos el sorteo", Toast.LENGTH_SHORT).show();
 
            iniciorunSeleccionAleatoria();
 
        }
    }

Y este es el metodo que desde la Clase que maneja la base de datos nos devuelve las consultas abriendo y cerrando la base de datos tantas veces como sea necesario hasta que salga una ciudad que no este incluida.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public String[] buscar_ciudad(String buscar) {
 
        String[] datos = new String[3];
 
        SQLiteDatabase database = this.getWritableDatabase();
        String q = "SELECT * FROM tablaCiudades WHERE ciudad ='" + buscar + "'";
        Cursor registros = database.rawQuery(q, null);
 
        if (registros.moveToFirst()) {
            for (int i = 0; i < 2; i++) {
                datos[i] = registros.getString(i);
 
            }
        } else {
 
        }
        database.close();
        return datos;
 
    }

Espero que este codigo le sea de utilidad a algun usuario y se agradeceria cualquier ayuda para mejorar el rendimiento del codigo simplificandolo.

Muchas gracias por su tiempo.
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 Francisco
Val: 466
Oro
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

Seleccion aleatoria usando array String

Publicado por Francisco (358 intervenciones) el 19/11/2016 13:32:07
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
ArrayList<String> Salidos= new ArrayList<String>();
 
 
 
public void empiezaLaSeleccion() {
 
	if (contador < ciudades.length - 1) {
 
	    resultadoCiudad.setText(ciudades[contador]);
	    contador++;
	    handler.postDelayed(runnable, 100);
 
 
	} else {
 
	    contador = 0;
 
	    resultadoCiudad.setText(" Sorteo " + ciudades[rando]);
	    handler.removeCallbacks(runnable);
 
 
	    if(Salidos.size()==ciudades.length){
			Toast.makeText(this, "Sorteo Finalizado", Toast.LENGTH_SHORT).show();
			handler.removeCallbacks(runnable);
			return;
	    }
	    if(Salidos.contains(ciudades[rando])){
 
			iniciorunSelecionAleatoria();
	    }else{
			Salidos.add(ciudades[rando]);
 
	    }
 
		// Llamo al metodo comprovar para comprovar ha salido anteriormente la ciudad
 
		// metodo_comprovar_ciudad_libre(); Este metodo te sobra
 
	}
}




Saludos,suerte.
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: 197
Plata
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

Seleccion aleatoria usando array String

Publicado por Luis (97 intervenciones) el 20/11/2016 14:39:00
Gracias nuevamente Francisco, nada más pueda lo pruebo y comento.
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