Beroende på vad man har valt i en grupp med radioknappar så skall 1, 2 eller 3 st. unika nummer slumpas fram.
Talen som slumpas fram skall vara mellan, 1-20 eller 1-40 eller nått liknande, vet inte riktigt än och talen får alltså inte vara lika.
men då får du slupa ett tal, lagra den nånstans och sedan varje gång du slumpar ett nytt tal så måste du kolla om talet redan har slumptas. Ifall det har så får du slumpa fram ett nytt osv osv...
public class MinKlass {
private java.util.ArrayList arrayList;
private java.util.Random random;
public static void main( String[] args ) {
new MinKlass();
}
public MinKlass() {
this.random = new Random();
this.arrayList = new ArrayList();
setRandomNumbers();
...
}
public void setRandomNumbers() {
for( int i = 0; i < 100; i++ ) {
createRandomNumber();
}
}
public void createRandomNumber() {
int n = this.random.nextInt( 40 );
if( this.arrayList.contains( n ) )
createRandomNumber();
else
this.arrayList.add( n );
}
}
Går säkert att göra snyggare, men jag är trött just nu. ;)
För det första ska man se till att använda samma Random-objekt hela tiden (som SPiN gör), då får man bättre spridning på talen. SPiNs lösning funkar, men den är snyggare om man a) använder ett HashSet och sedan b) kollar returvärdet på add-metoden - returnerar den false finns redan objektet man försöker lägga till i den :)
Rekursion är kul men i detta fall onödigt ;)
När jag tänker efter behöver man inte utnyttja returvärdet från add... jag skulle nog gjort såhär:
import java.util.*;
public class RandomNumbers{
private Set numbers = new HashSet();
private Random random = new Random();
public static void main( String[] args ) {
new RandomNumbers(5, 1, 40);
}
public RandomNumbers(int size, int lowerBound, int upperBound){
int genAmount = upperBound - lowerBound + 1;
assert size <= genAmount : "för många tal";
while(numbers.size() < size){
int n = random.nextInt(genAmount) + lowerBound;
numbers.add(new Integer(n));
}
display();
}
public void display() {
System.out.println(numbers);
}
}