5 回答

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個贊
Set沒有順序,也不包含重復(fù)項(xiàng)——就像數(shù)學(xué)一樣。Random是您在程序中實(shí)例化一次的東西,絕對不是在循環(huán)中間實(shí)例化的東西。
如果你想要一個 0 到 9999 之間的隨機(jī)數(shù),那么只需生成一個隨機(jī)數(shù)即可。然后,您可以在打印或轉(zhuǎn)換為字符串時添加缺失的零:
private static Random rnd=new Random();
public static int getRandom(){
return rnd.nextInt(10000);
}
public static void main(String args[]){
int r=getRandom();
System.out.println("As number: "+r);
System.out.printf("As 4-digit code, just printing: %04d\n",r);
String s=String.format("%04d",r);
System.out.println("As 4-digit code, in separate string: "+s);
}
測試: https: //ideone.com/6Rmc8j(雖然Ideone緩存了一個4位數(shù)字,運(yùn)氣不好)。

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個贊
這里有很多東西需要解開,但對于實(shí)際問題:
您會得到不同的結(jié)果,因?yàn)榧显谠O(shè)計(jì)上接受唯一的值。有時您會從隨機(jī)中獲得相同的整數(shù),因此它不會被添加到集合中,因?yàn)樗呀?jīng)存在了。
你需要一個ArrayList
或類似的東西。

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個贊
首先你的問題。
的參數(shù)getRandom(Set<Integer> setInt)未被使用。無論如何,您都會在函數(shù)內(nèi)創(chuàng)建一個新集合。這就是為什么傳遞null仍然有效。那么不妨改成:
public static Set<Integer> getRandom(){
Set<Integer> setInt = new HashSet<>();
你的循環(huán)只是說你想循環(huán) 4 次。如果碰巧生成相同的數(shù)字,該集合將省略重復(fù)的數(shù)字,因此您最終可能會得到更少的數(shù)字。
你真正需要的是一個列表,這樣重復(fù)項(xiàng)就不會被消除。
public static List<Integer> getRandom(){
List<Integer> list = new ArrayList<>(4);
另外,你應(yīng)該把它放在Random外面。如果每次在循環(huán)內(nèi)創(chuàng)建一個新序列,它將丟失其偽隨機(jī)序列。
最后,如果您決定使用 Java 8,還有更好的方法。
Random random = new Random();
return Stream.generate(() -> random.nextInt(10))
.limit(4)
.collect(Collectors.toList());

TA貢獻(xiàn)1111條經(jīng)驗(yàn) 獲得超0個贊
我需要創(chuàng)建一個方法來創(chuàng)建 4 位隨機(jī)數(shù),例如 0050、0100、9999
因此,這些值都不可能,因?yàn)槭褂?Set 將防止添加重復(fù)的數(shù)字。在 10 個數(shù)字中你得到 4 個唯一數(shù)字的機(jī)會相當(dāng)小
不太明白為什么我必須將 getRandom 方法中的變量設(shè)置為“null”。System.out.println(getRandom()); 沒有成功
您有該方法的參數(shù),但您立即覆蓋它。如果您希望第二種方式起作用,請刪除方法參數(shù)
除了哈希集還有其他方法嗎?
使用它有什么要求嗎?如果沒有,List
及其子類將是更好的選擇

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個贊
您不應(yīng)該將Set當(dāng)作 的參數(shù)getRandom。
在方法中創(chuàng)建集合getRandom并返回它。
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class RandomNumber {
public static Set<Integer> getRandom(){
HashSet<Integer> setInt = new HashSet<>();
Random random = new Random();
for (int i = 0; i < 4; i++){
int n = random.nextInt(10);
setInt.add(n);
}
return setInt;
}
public static void main(String[] args) {
System.out.println(getRandom());
}
}
添加回答
舉報