5 回答

TA貢獻1893條經驗 獲得超10個贊
Set沒有順序,也不包含重復項——就像數學一樣。Random是您在程序中實例化一次的東西,絕對不是在循環中間實例化的東西。
如果你想要一個 0 到 9999 之間的隨機數,那么只需生成一個隨機數即可。然后,您可以在打印或轉換為字符串時添加缺失的零:
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位數字,運氣不好)。

TA貢獻1815條經驗 獲得超13個贊
這里有很多東西需要解開,但對于實際問題:
您會得到不同的結果,因為集合在設計上接受唯一的值。有時您會從隨機中獲得相同的整數,因此它不會被添加到集合中,因為它已經存在了。
你需要一個ArrayList
或類似的東西。

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

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

TA貢獻1875條經驗 獲得超5個贊
您不應該將Set當作 的參數getRandom。
在方法中創建集合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());
}
}
添加回答
舉報