-1

Possible Duplicate:
Random permutation of integers using a random number generator
How to make a random number but it doesn’t produce the same number

i have create 3 random numbers i want those 3 numbers not repetition

for example if the first random number is = to 3 i dont want the second number or the third number = to 3
and get the min number and random it on 3 buttons ten set those numbers in the buttons

package com.math4kids;

import java.util.Random;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;

public class MinNumber extends Activity {
public Button result1, result2, result3;
public Random random = new Random();
int[] array1 = new int[3] ;
int minimum = array1[0]; //sets the first to be the smallest
int num1,num2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.minnumber);

    result1 = (Button)findViewById(R.id.result1);
    result2= (Button)findViewById(R.id.result2);
    result3= (Button)findViewById(R.id.result3);



    array1[0] = random.nextInt(10) + 1;
    array1[1] = random.nextInt(10) + 1;;
    array1[2] = random.nextInt(10) + 1;;


    for (int i = 0; i < array1.length; i++) //goes through your array
    {
         if (array1[i] < array1[0]) //checks and replaces if necessary
         {
            minimum = array1[i];   


         }
         if(array1[0]==minimum){
             num1=array1[1];
             num2=array1[2];
         }
         if(array1[1]==minimum){
             num1=array1[0];
             num2=array1[2];
         }
         if(array1[2]==minimum){
             num1=array1[1];
             num2=array1[0];
         }
            switch (random.nextInt(3)) {
            case 0:
                result1.setText(String.valueOf(minimum));
                result2.setText(String.valueOf(num1 ));
                result3.setText(String.valueOf(num2 ));
                break;
            case 1:
                result2.setText(String.valueOf(minimum));
                result1.setText(String.valueOf(num1));
                result3.setText(String.valueOf(num2));
                break;
            case 2:
                result3.setText(String.valueOf(minimum));
                result2.setText(String.valueOf(num1));
                result1.setText(String.valueOf(num2));
                break;
            }
    }





}

}
Community
  • 1
  • 1
Mohammed Asmar
  • 308
  • 2
  • 5
  • 21

3 Answers3

4

It could be solved by creating HashSet for keeping the already generated values. For example:

Set<Integer> used = new HashSet<Integer>();

// wrap this code-block in some method...
Integer num;
do {
   num = random.nextInt(10);
   if (!used.contains(num)) {
      used.add(num);
      break;
   }
} while(used.size() < 10);
Andremoniy
  • 34,031
  • 20
  • 135
  • 241
2

I would do something like:

num1 = random.nextInt(10) ;
num2  =( num1 + random.nextInt(10-1)+1) % 10 ;
num3 = random.nextInt(10) ;
while(num3==num1 || num3==num2)
    num3 = random.nextInt(10) ;
MrSmith42
  • 9,961
  • 6
  • 38
  • 49
0

here's a psuedo code for you:

int numbers[total_numbers]=-1;

for (j=0:total_numbers)
{
  flag=false;
  while (flag=false)
  {
     temp=random();
     flag=true;
     for (i=0:total_numbers) check if temp == numbers[i] then flag=false;
  }
  numbers[j]=temp;
}
Wops
  • 983
  • 9
  • 23