2015-10-16 30 views
1

如何打印給定範圍內的數字。例如:隨機順序10 - 13(10 12 13 11)?如何以隨機順序在給定範圍內打印數字

public class RandomizeNumbers { 
    public static void main(String[] args) { 
     Scanner getInput = new Scanner(System.in); 
     int minimum = getInput.nextInt(); 
     int maximum = getInput.nextInt(); 
     Random t = new Random(); 

     for (int i = minimum; i <= maximum; i++) { 
      System.out.println(t.nextInt(i)); 
     } 
    } 
} 
+1

可能重複http://stackoverflow.com/questions/363681/generating-random-integers -in-a-range-with-java –

+0

@SajanChandran不,它不是重複的。目前的問題是關於列表排列。你的鏈接是關於挑選一個特定範圍內的一個隨機整數。 – Nayuki

回答

4

填寫了必要的物品清單,並使用Collections.shuffle()洗牌它們,然後打印:

List<Integer> c = new ArrayList<>(); 
for (int i = start; i <= end; i++) 
    c.add(i); 
Collections.shuffle(c); 
System.out.println(c); 
0

只是知識,你不能使用這種方法,

new Random().ints(start, endExclusive).distinct().limit(quantity).boxed().forEach(System.out::println); 

觀測數據:你需要java 8來使用它。

+0

對於大範圍的數字,效率非常低(生成的項目越多 - >生成下一個項目的嘗試次數越多)。 –

+0

@SashaSalauyou是的,這是非常低效的。在性能方面,可能您的解決方案是最好的解決方案之一。 –

0

使用Java 8 IntStream,它是那樣簡單:

IntStream.rangeClosed(minimum, maximum).map(i -> t.nextInt(i)) 
       .forEach(System.out::println); 

用法:

import java.util.Random; 
import java.util.Scanner; 
import java.util.stream.IntStream; 

public class RandomNumbers { 
    public static void main(String[] args) { 
     Scanner getInput = new Scanner(System.in); 
     int minimum = getInput.nextInt(); 
     int maximum = getInput.nextInt(); 

     Random t = new Random(); 
     IntStream.rangeClosed(minimum, maximum).map(i -> t.nextInt(i)) 
       .forEach(System.out::println); 

     getInput.close(); 
    } 
} 
相關問題