Een array met unieke random getallen

  • Onderwerp starter Onderwerp starter JM007
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

JM007

Gebruiker
Lid geworden
8 jan 2004
Berichten
16
Dag allemaal,

Wat ik wil doen is een array maken met random getallen tussen 1 en 4, elk getal mag maar 1 keer voorkomen.



Code:
public static int[] randomize() {

		int[] random = new int[4];
		int randomgetal;

		for (int i = 0; i < random.length; i++) {

			randomgetal = 1 + (int) (Math.random() * 4);

			for (int j = 0; j < random.length; j++) {
				if (randomgetal == random[j]) {
					while (randomgetal == random[j]) {
						randomgetal = 1 + (int) (Math.random() * 4);
					}
				}

			}
			random[i] = randomgetal;
		}

		return random;
	}

In de code laat ik dus een randomgetal generen, daarna ga ik door alle elementen van de array (random[j]) en controleer ik met een if lus of het randomgetal zich reeds bevindt in de array, als dat het geval is wordt een while lus uitgevoerd die een nieuw randomgetal genereert tot het randomgetal niet meer gelijk is aan het getal uit de array.
Dan mag het randomgetal toegevoegd worden aan de array (random = randomgetal;)

Dit geeft mij dus geen array van unieke getallen, de getallen kunnen nog steeds meerdere keren voorkomen, ziet iemand wat ik fout doe?
 
Je doet een while, waarbij het random getal gelijk is aan het getal in de array.
Wat nou als dit je array is:
0: 3
1: 2
2: 1

Als laatste getal wordt er het getal '2' gegenereerd. Deze komt in de array voor, dus gaat ie een nieuw getal genereren. Als dit nieuwe random getal het getal '3' is, gaat ie uit de while-lus (en omdat de index 'j' al niet meer bij de eerste positie is).. waardoor je array er zo uitziet:
0: 3
1: 2
2: 1
3: 3.

Je moet dus bij elk random getal de hele array weer doorlopen zegmaar.. oftewel: de variabele 'j' resetten en continue-en (gok ik, niet getest).


Ik hoop dat je me nog snapt :D
 
Je doet een while, waarbij het random getal gelijk is aan het getal in de array.
Wat nou als dit je array is:
0: 3
1: 2
2: 1

Als laatste getal wordt er het getal '2' gegenereerd. Deze komt in de array voor, dus gaat ie een nieuw getal genereren. Als dit nieuwe random getal het getal '3' is, gaat ie uit de while-lus (en omdat de index 'j' al niet meer bij de eerste positie is).. waardoor je array er zo uitziet:
0: 3
1: 2
2: 1
3: 3.

Je moet dus bij elk random getal de hele array weer doorlopen zegmaar.. oftewel: de variabele 'j' resetten en continue-en (gok ik, niet getest).


Ik hoop dat je me nog snapt :D



Heel erg bedankt!! Ik heb gewoon j=0 gezet aan het eind van de while lus en nu werkt het!!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan