I\'m trying to create an android application which will generate random series of values (integer numbers in this case) in a given range (but NOT equal betw
int low = ...;
int high = ...;
List<Integer> choices = new LinkedList<Integer>();
for (int i = low; i <= high; i++) {
choices.add(i);
}
Collections.shuffle(choices);
int[] choices = new int[] {
choices.get(0),
choices.get(1),
choices.get(2),
choices.get(3),
choices.get(4)
};
final StringBuilder builder = new StringBuilder();
final Random r = new Random(System.currentTimeMillis());
final Set<Integer> numbers = new HashSet<Integer>();
public String getRandomNumbers(int count,int min, int max)
{
if(count > (max - min) || (max < min))
throw new IllegalArgumentException("There is an error with the parameters provided");
builder.setLength(0); //Clear StringBuilder
numbers.clear(); //Clear the number list
int i=0;
while( i < count )
{
int aRandomNumber = (r.nextInt() % max) +min;
if(numbers.contains(aRandomNumber)) // If we have seen this number already
continue;
else
{
i++;
numbers.add(aRandomNumber);
builder.append(aRandomNumber); //Add number to string
if( i < (count-1) )
builder.append(", "); // Add a comma if it's not the last number
}
}
String output = builder.toString();
builder.setLength(0); //A polite clearing
numbers.clear();
return output;
}
If I understand this correctly, you all the numbers should be unique. You could fill a list with the range you want to draw from. Every time you have selected a value from it, you should remove it from the list so it won't be selected a second time. I hope this description is clear enough. If not, I will provide some code.
public int[] generateSeries(){
int[] R = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
int [] newarray=new int[5];
Collections.shuffle(Arrays.asList(R));
for(int i=0;i<5;i++)
{
newarray[i]=R[i];
System.out.println("values => "+R[i]);
}
return newarray;
hope use full to you....
in the edit code:
int idx = r.nextInt();
needs to change to:
int idx = r.nextInt(data.length);
because you want to choose a random index from your data.
Random r = new Random(<a seed number>);
Set<Integer> mySet = new HashSet<Integer>();
while (mySet.size() < 5) {
int idx = r.nextInt(<length of your data>)
mySet.add(data[idx]);
}
data contains your range numbers.
String text = "";
for (Integer i : mySet) {
text = text + i + ", ";
}
set this text in your TextView.