How to select random values from a given range

前端 未结 6 613
一整个雨季
一整个雨季 2021-01-06 10:44

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

相关标签:
6条回答
  • 2021-01-06 11:18
    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)
    };
    
    0 讨论(0)
  • 2021-01-06 11:23
    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;
    }
    
    0 讨论(0)
  • 2021-01-06 11:28

    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.

    0 讨论(0)
  • 2021-01-06 11:36
    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....

    0 讨论(0)
  • 2021-01-06 11:41

    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.

    0 讨论(0)
  • 2021-01-06 11:44
    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.

    0 讨论(0)
提交回复
热议问题