Buenas, soy consciente que la pregunta que voy hacer puede ser tonta, pero no sé porque no me sale. Perdón por mi ignorancia. Estoy probando de hacer cinco variables int las cuales generen cada una un número al azar del 0 al 10, con la condición que los cinco valores al azar sean diferentes, que ninguno se repita.
El caso es que he estado probando con tres variables con un rango del 0 al 3 para ver si me salía ya que así es más fácil, para después trasladarlo a cinco variables con un rango del 0 al 10, que es como me interesa.
Esta era mi prueba fallida:
private int _vA;
private int _vB;
private int _vC;
void Start ()
{
_vA = Random.Range(0, 3);
}
void Update()
{
if (_vA == _vB)
{
_vB = Random.Range(0, 3);
}
if (_vA == _vA && _vA ==_vB)
{
_vC = Random.Range(0, 3);
}
Debug.Log (_vA);
Debug.Log (_vB);
Debug.Log (_vC);
}
Había pensado que el valor B probase un número al azar hasta que este fuese diferente de A; e igual con C, que pruebe un valor hasta que sea diferente de A y B. Pero no sé poruque no funciona.
¿Qué está incorrecto? ¿Cómo podría lograr esto?
Muchas gracias de antemano.
Lo que tendrias que hacer es realizar una lista con los elementos ya utilizados.
public class Random
{
private Stack<int> _last = new Stack<int>();
public bool Get(int min, int max, out int r)
{
for(int i = min; i < max; i++)
{
r = UnityEngine.Random.Range(min, max);
if(!_last.Contains(r))
{
_last.Push(r);
return true;
}
}
r = 0;
return false;
}
public void Reset()
{
_last.Clear();
}
}
Para utilizarlo haz lo siguiente -
private Random myRandom = new Random();
public void Update()
{
int val;
if(myRandom.Get(0,10, out val))
{
Debug.LogFormat("El valor utilizado es " + val);
}
else
{
Debug.Log("No se encuentran valores disponibles");
Debug.Log("Reiniciando");
myRandom.Clear();
}
}
@pioj Podrías integrar un sistema de CODDING diferente, este es un asco.
Cita de: yhuj date=1515839994cinco variables int las cuales generen cada una un número al azar del 0 al 10, con la condición que los cinco valores al azar sean diferentes
es un problema muy comun, haces un array de 1 a 10 y lo revuelves intercambiando elementos aleatoriamente, luego tomas los 5 primeros o los que necesites
// inicias
var lista = new int[10];
for (var i = 0; i < lista.length; i++) lista = i;
// revuelves
for (var i = 0; i < lista.length; i++) {
var i1 = random.range(lista.length);
var temp = lista;
lista = lista[i1];
lista[i1] = temp;
}
// tomas los valores
mi_variable1 = lista[0];
mi_variable2 = lista[1];
mi_variable3 = lista[2];
mi_variable4 = lista[3];
mi_variable5 = lista[4];
Sorry @francoe1, es lo mejor que he encontrado. Si consigues un "pastebin" BUENO para IPB 4.1, te lo admito como plugin. Mientras tanto...
Cita de: pioj date=1515954708Sorry @francoe1, es lo mejor que he encontrado. Si consigues un "pastebin" BUENO para IPB 4.1, te lo admito como plugin. Mientras tanto...
https://github.com/sketchfab/ckeditor-plugin (https://github.com/sketchfab/ckeditor-plugin)
En el apartado de ejemplos tenes una integración con IPB