我知道如何做一個隨機數是兩個數字之間:生成多個之間的隨機數範圍
1 + (int)(Math.random() * ((10 - 1) + 1))
或
Min + (int)(Math.random() * ((Max - Min) + 1))
但我如何去產生一個隨機數,其落入多個範圍?
例如:數量可以是1 10之間或50之間以60
我知道如何做一個隨機數是兩個數字之間:生成多個之間的隨機數範圍
1 + (int)(Math.random() * ((10 - 1) + 1))
或
Min + (int)(Math.random() * ((Max - Min) + 1))
但我如何去產生一個隨機數,其落入多個範圍?
例如:數量可以是1 10之間或50之間以60
我會去像這樣的東西,讓你用盡可能多的範圍內做到這一點,只要你喜歡:
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
class RandomInRanges
{
private final List<Integer> range = new ArrayList<>();
RandomInRanges(int min, int max)
{
this.addRange(min, max);
}
final void addRange(int min, int max)
{
for(int i = min; i <= max; i++)
{
this.range.add(i);
}
}
int getRandom()
{
return this.range.get(new Random().nextInt(this.range.size()));
}
public static void main(String[] args)
{
RandomInRanges rir = new RandomInRanges(1, 10);
rir.addRange(50, 60);
System.out.println(rir.getRandom());
}
}
首先產生1和20之間的整數然後,如果該值高於10,映射到所述第二時間間隔。
Random random = new Random();
for (int i=0;i<100;i++) {
int r = 1 + random.nextInt(60-50+10-1);
if (r>10) r+=(50-10);
System.out.println(r);
}
首先,你需要知道有多少數字是在每個範圍。 (我假設你從離散範圍中選擇整數,而不是連續範圍內的實數)。在你的例子中, 在第一個範圍內有10個整數,而在第二個範圍內有11個整數。這意味着10/21次,你應該從第一個範圍中選擇,並從第二個中選擇11/21次。在僞代碼
x = random(1,21)
if x in 1..10
return random(1,10)
else
return random(50,60)
這些範圍很容易被變量替代。 並使用變量計算所有範圍內的總數。 – Halfacht 2017-08-14 15:47:53
如果列表已知我認爲你可以使用類似這樣的東西。
public class Test
{
public static void main(String[] args)
{
int a;
for(int i=0;i<10;i++)
{
a=(int) (Math.random()*((10-0)+(60-50)));
if(a<=10)
{
}
else if(a>(60-50))
{
a=a+50;
}
System.out.println(a);
}
}
}
如何以下方法:隨機挑選的範圍內使用該範圍generage您的隨機數,對於你必須把你的範圍在某些列表或陣列
public class RandomRangeGenerator {
class Range {
public int min, max;
public Range(int min, int max) { this.min = min; this.max = max; }
}
@Test
public void generate() {
List<Range> ranges = new ArrayList<>();
ranges.add(new Range(1, 10));
ranges.add(new Range(50, 60));
List<Integer> randomNumbers = generateRandomNumbers(ranges, 10);
System.out.println(randomNumbers.toString());
for(Integer i : randomNumbers) {
Assert.assertTrue((i >= 1 && i <= 10) || (i >= 50 && i <= 60));
}
}
private List<Integer> generateRandomNumbers(List<Range> ranges, int numberOfNumbers) {
List<Integer> randomNumbers = new ArrayList<>(numberOfNumbers+1);
while(numberOfNumbers-- > 0) {
Range range = ranges.get(new Random().nextInt(ranges.size()));
randomNumbers.add(range.min + (int)(Math.random() * ((range.max - range.min) + 1)));
}
return randomNumbers;
}
}
精編要求的範圍,但對於數量太多的範圍可能不切實際。 – Javier 2013-03-23 19:42:28
這很好用!雖然我並不知道它是如何工作的。 – 2013-03-23 20:56:28
@KarloDelalic基本上,它只是列出你給它的範圍內的所有數字,然後從該列表中選取一個隨機數,因此它是來自任何範圍的隨機數。 – MrLore 2013-03-23 20:58:42