为了账号安全,请及时绑定邮箱和手机立即绑定

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条经验 获得超12个赞

这里有很多东西需要解开,但对于实际问题:

您会得到不同的结果,因为集合在设计上接受唯一的值。有时您会从随机中获得相同的整数,因此它不会被添加到集合中,因为它已经存在了。

你需要一个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 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信