|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: May 2003
Messaggi: 93
|
[java] Generare numeri non ripetuti
Codice:
Random generatore = new Random(); num = generatore.nextInt(1000);
__________________
...Time to bring it down again. Don't just call me pessimist. Try and read between the lines... |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Potresti crearti parallelamente all'array che ti interessa un array temporaneo, dove inserisci gli interi che generi ma in modo ordinato, ognuno al suo indice, poi prima di inserire l'intero nell'array vero controlli se nell'altro array prima o dopo l'intero appena inserito non ce ne sia uno uguale.
Il problema è che se te vuoi un array di 1000 interi, e vuoi che i numeri casuali vadano da 0 a 1000, quando sarai verso la fine che ti mancano pochi interi da inserire ci metterà molto a trovare quello mancante... Comunque per quello che ho appena detto: Codice:
for(int i=0;i<size;i++){
int random=(int)(Math.random()*limite)
tempArray[random]=random;
if(tempArray[random]!=tempArray[random-1]&&tempArray[random]!=tempArray[random+1])
array[i]=random;
}
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Ah, l'array temporaneo è meglio che sia un ArrayList così puoi inserire gli elementi senza specificare una dimensione di partenza.
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Una possibilità potrebbe essere questa:
Codice:
import java.lang.*;
import java.util.Random;
public class UniqueRandom
{
private Random rnd;
private int[] values;
private int size;
public UniqueRandom (int min, int max, long seed)
{
init (min, max);
rnd = new Random (seed);
}
public UniqueRandom (int min, int max)
{
init (min, max);
rnd = new Random ();
}
private void init (int min, int max)
{
if (min > max)
throw new IllegalArgumentException ();
size = max - min + 1;
values = new int[size];
for (int i = 0; i < size; i++)
values[i] = min + i;
}
public boolean hasValue ()
{
return size > 0;
}
public int extract ()
{
if (size == 0)
throw new IllegalStateException ();
int idx = rnd.nextInt (size);
int v = values[idx];
values[idx] = values[--size];
return v;
}
}
Non so se è quello che volevi e se ti va bene.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: May 2003
Messaggi: 93
|
juuuuu ho risolto grazie ad entrambi
la tua soluzione andbin è ottima per quello che mi serve
__________________
...Time to bring it down again. Don't just call me pessimist. Try and read between the lines... |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:20.











la tua soluzione andbin è ottima per quello che mi serve








