我是Java的新手,想要尝试制作一个可以随机生成2个数字的代码,并且它会跟踪2个数字相同的次数。然后在X次尝试之后,它将计算它发生的可能性。
randoms除以它们相同的次数
import java.util.Random;
public class RandomTest {
public static void main(String[] args) {
int[] anArray;
anArray = new int[100000];
Random randomGenerator = new Random();
for (int loop = 1; loop < 1000; loop++) {
int random1 = randomGenerator.nextInt(100);
int random2 = randomGenerator.nextInt(100);
if (random1 == random2) {
int number = number + 1;
countArray[number] = loop;
}
if (loop == 1000) {
System.out.println("Took " + loop + " randoms.");
break;
}
else {}
}
}
}
主要问题似乎是要填充数组以及进入/退出循环。
答案 0 :(得分:4)
以下是我的代码版本:
import java.util.Random;
import java.util.ArrayList;
public class RandomTest {
public static void main(String[] args) {
ArrayList<Integer> duplicates = new ArrayList<Integer>();
int random1 = 0, random2 = 0;
Random randomGenerator = new Random();
for (int loop = 1; loop <= 1000; loop++) {
random1 = randomGenerator.nextInt(100);
random2 = randomGenerator.nextInt(100);
if (random1 == random2) {
duplicates.add(new Integer(random1));
}
}
for (Integer i : duplicates) {
System.out.println("Duplicate: "+i.toString());
}
}
}
您的解决方案包含许多问题:
int number = number + 1;
上面将创建一个名为number的新int,并赋予它null + 1的值,这是因为上面的内容可以分成2行:
int num;
num = num + 1;
第一行将为名为num的变量保留内存空间。第二行将尝试将(num + 1)的值放入num中。因为我们正在调用num并且它尚未初始化 - 这将给我们一个java.lang.Error(至少这是我得到的)。
正如您所看到的那样,将数字放在for循环之外并将其初始化为:
int number = 0;
for (int loop = 1; loop <= 1000; loop++) {
number = number + 1;
}
将数字的值增加1,999次。
这让我想到了下一点。 for循环永远不会使loop = 1000,因为条件会在条件为真之前停止循环,所以当for循环结束时,循环将等于999.如果你想循环完成loop = 1000你应该使用{{ 1}}。此外,if条件不是必需的,因为当循环结束时它将继续执行其下面的其余代码。
我的解决方案中根本没有使用loop <= 1000
,这是因为我使用的是ArrayList,它本质上是一个更高级的数组版本,可以动态增长并执行其他很酷的东西。不幸的是ArrayLists需要包含对象,所以我将每个number
包装在int
对象中,这很好。最后,我使用for循环遍历重复列表,为每个结果打印出来。
希望这会有所帮助,如果您有任何问题,请随时在下面发表评论。
答案 1 :(得分:0)
你可能想对这一行做点什么:
int number = number + 1;
要逐步执行数组,请将数字设置为零
int number = 0;
在进入循环之前然后用
增加数字number = number + 1;