我无法在JAVA中获得4位数的随机数

问题描述 投票:-2回答:5

我真的是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循环中表示我<4。我无法将结果保持为4数字。为什么?

我迷路了!如果有人可以帮助我,我将不胜感激。我也想知道我是否使用了正确的方法,因为我需要一个四位数的数字,并且我使用了一个哈希表,理想情况下为我提供了一个4元素表。除了哈希集,还有其他方法吗?

谢谢你们!

java for-loop random hashset digits
5个回答
1
投票

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位数字,很不幸)。


0
投票

这里有很多东西要解压,但要解决实际问题:

您得到的结果各不相同,因为Set在设计上接受unique值。有时您会从Random中获得相同的整数,因此不会将其添加到Set中,因为它已经存在。

您需要ArrayList或类似名称。


0
投票

我需要创建一种方法,该方法可以创建4位数的随机数,例如0050、0100、9999

因此,这些值都不是可能的,因为使用Set将防止重复的数字被添加。而且您从10中得到4个唯一数字的机会非常小

并不太明白为什么我必须在getRandom方法中将变量设置为“ null”。 System.out.println(getRandom());没有解决

您对该方法有一个参数,但是您立即将其覆盖。如果要使用第二种方法,请删除方法参数

除了哈希集,还有其他方法吗?

是否有一些要求使用一个?如果没有,List及其子类将是一个更好的选择


0
投票

首先您的问题。

未使用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());

0
投票

您不应该将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());
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.