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());
}
}
添加回答
举报