亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JAVA無法獲取4位隨機數

JAVA無法獲取4位隨機數

慕姐8265434 2023-09-27 16:11:12
我對java真的很陌生。我需要創建一個方法來創建 4 位隨機數,例如 0050、0100、9999。所以該數字的每個數字都有 0 到 9 的限制!這是我發現的:package randomNumber;import java.util.HashSet;import java.util.Random;import java.util.Set;public class RandomNumber {    public static Set<Integer> getRandom(Set<Integer> setInt){        setInt = new HashSet<Integer>();        for (int i = 0; i < 4; i++){            Random random = new Random();            i = random.nextInt(10);                 setInt.add(i);                  };        return setInt;    }    public static void main(String[] args) {        System.out.println(getRandom(null));    }}所以我不太明白為什么我必須將 getRandom 方法中的變量設置為“null”。System.out.println(getRandom()); 沒有成功。如果有人能向我解釋這一點,我將不勝感激不管怎樣,我很高興在我多次運行代碼之前沒有收到任何錯誤消息。我有 1 位數字,或 2 位數字,有時有 3 位數字,但似乎我永遠不能有 4 位數字,而我在 for 循環中指出 i < 4。我無法將結果保持為 4數字。為什么?我迷路了!如果有人可以幫助我,我將不勝感激。我還想知道我是否使用了正確的方法,因為我需要一個四位數字,并且我使用了一個哈希集,它理想地為我提供了一個 4 元素表。除了哈希集還有其他方法嗎?
查看完整描述

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位數字,運氣不好)。



查看完整回答
反對 回復 2023-09-27
?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

這里有很多東西需要解開,但對于實際問題:

您會得到不同的結果,因為集合在設計上接受唯一的值。有時您會從隨機中獲得相同的整數,因此它不會被添加到集合中,因為它已經存在了。

你需要一個ArrayList或類似的東西。


查看完整回答
反對 回復 2023-09-27
?
HUWWW

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());


查看完整回答
反對 回復 2023-09-27
?
catspeake

TA貢獻1111條經驗 獲得超0個贊

我需要創建一個方法來創建 4 位隨機數,例如 0050、0100、9999

因此,這些值都不可能,因為使用 Set 將防止添加重復的數字。在 10 個數字中你得到 4 個唯一數字的機會相當小

不太明白為什么我必須將 getRandom 方法中的變量設置為“null”。System.out.println(getRandom()); 沒有成功

您有該方法的參數,但您立即覆蓋它。如果您希望第二種方式起作用,請刪除方法參數

除了哈希集還有其他方法嗎?

使用它有什么要求嗎?如果沒有,List及其子類將是更好的選擇


查看完整回答
反對 回復 2023-09-27
?
慕田峪4524236

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());

    }

}


查看完整回答
反對 回復 2023-09-27
  • 5 回答
  • 0 關注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號