我真的是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元素表。除了哈希集,还有其他方法吗?
谢谢你们!
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位数字,很不幸)。
这里有很多东西要解压,但要解决实际问题:
您得到的结果各不相同,因为Set在设计上接受unique值。有时您会从Random中获得相同的整数,因此不会将其添加到Set中,因为它已经存在。
您需要ArrayList
或类似名称。
我需要创建一种方法,该方法可以创建4位数的随机数,例如0050、0100、9999
因此,这些值都不是可能的,因为使用Set将防止重复的数字被添加。而且您从10中得到4个唯一数字的机会非常小
并不太明白为什么我必须在getRandom方法中将变量设置为“ null”。 System.out.println(getRandom());没有解决
您对该方法有一个参数,但是您立即将其覆盖。如果要使用第二种方法,请删除方法参数
除了哈希集,还有其他方法吗?
是否有一些要求使用一个?如果没有,List
及其子类将是一个更好的选择
首先您的问题。
未使用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());
您不应该将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());
}
}