JAVA无法获取4位随机数

我对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 元素表。除了哈希集还有其他方法吗?


慕姐8265434
浏览 171回答 5
5回答

白猪掌柜的

Set没有顺序,也不包含重复项——就像数学一样。Random是您在程序中实例化一次的东西,绝对不是在循环中间实例化的东西。如果你想要一个 0 到 9999 之间的随机数,那么只需生成一个随机数即可。然后,您可以在打印或转换为字符串时添加缺失的零:private static Random rnd=new Random();public static int getRandom(){&nbsp; return rnd.nextInt(10000);}public static void main(String args[]){&nbsp; int r=getRandom();&nbsp; System.out.println("As number: "+r);&nbsp; System.out.printf("As 4-digit code, just printing: %04d\n",r);&nbsp; String s=String.format("%04d",r);&nbsp; System.out.println("As 4-digit code, in separate string: "+s);}测试: https:&nbsp;//ideone.com/6Rmc8j(虽然Ideone缓存了一个4位数字,运气不好)。

萧十郎

这里有很多东西需要解开,但对于实际问题:您会得到不同的结果,因为集合在设计上接受唯一的值。有时您会从随机中获得相同的整数,因此它不会被添加到集合中,因为它已经存在了。你需要一个ArrayList或类似的东西。

HUWWW

首先你的问题。的参数getRandom(Set<Integer> setInt)未被使用。无论如何,您都会在函数内创建一个新集合。这就是为什么传递null仍然有效。那么不妨改成:public static Set<Integer> getRandom(){&nbsp; &nbsp; Set<Integer> setInt = new HashSet<>();你的循环只是说你想循环 4 次。如果碰巧生成相同的数字,该集合将省略重复的数字,因此您最终可能会得到更少的数字。你真正需要的是一个列表,这样重复项就不会被消除。public static List<Integer> getRandom(){&nbsp; List<Integer> list = new ArrayList<>(4);另外,你应该把它放在Random外面。如果每次在循环内创建一个新序列,它将丢失其伪随机序列。最后,如果您决定使用 Java 8,还有更好的方法。Random random = new Random();return Stream.generate(() -> random.nextInt(10))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.limit(4)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.collect(Collectors.toList());

catspeake

我需要创建一个方法来创建 4 位随机数,例如 0050、0100、9999因此,这些值都不可能,因为使用 Set 将防止添加重复的数字。在 10 个数字中你得到 4 个唯一数字的机会相当小不太明白为什么我必须将 getRandom 方法中的变量设置为“null”。System.out.println(getRandom());&nbsp;没有成功您有该方法的参数,但您立即覆盖它。如果您希望第二种方式起作用,请删除方法参数除了哈希集还有其他方法吗?使用它有什么要求吗?如果没有,List及其子类将是更好的选择

慕田峪4524236

您不应该将Set当作 的参数getRandom。在方法中创建集合getRandom并返回它。import java.util.HashSet;import java.util.Random;import java.util.Set;public class RandomNumber {&nbsp; &nbsp; public static Set<Integer> getRandom(){&nbsp; &nbsp; &nbsp; &nbsp; HashSet<Integer> setInt = new HashSet<>();&nbsp; &nbsp; &nbsp; &nbsp; Random random = new Random();&nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i < 4; i++){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int n = random.nextInt(10);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setInt.add(n);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return setInt;&nbsp; &nbsp; }&nbsp; &nbsp; public static void main(String[] args) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(getRandom());&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java