1

我对 Java 比较陌生,想尝试编写一个代码,该代码会在一定次数内随机生成 2 个数字,并且它会跟踪这 2 个数字相同的次数。然后在 X 次尝试之后,它会计算它发生的机会。

# 随机数除以它们相同的时间

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 {}
        }
    }
}

主要问题似乎是让数组填充并让整数进入/退出循环。

4

2 回答 2

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;
}

将 number 的值增加 1, 999 次。

这让我想到了下一点。for 循环永远不会使 loop = 1000,因为条件将在条件为真之前停止循环,因此当 for 循环结束时,loop 将等于 999。如果您希望循环在 loop = 1000 时结束,您应该使用loop <= 1000. 此外,if 条件不是必需的,因为当循环完成时,它将继续执行其下方的其余代码。

我的解决方案中根本没有使用number过,这是因为我使用了ArrayList,它本质上是一个更高级的数组版本,可以动态增长并执行许多其他很酷的东西。不幸的是,ArrayLists 需要包含对象,所以我将每个对象包装int在一个Integer对象中,这很好。最后,我使用 for 循环遍历重复列表,对于每个结果,我都将其打印出来。

希望这会有所帮助,如果您有任何问题,请随时在下方发表评论。

于 2013-05-17T13:18:19.397 回答
0

You probably want to do something about this line:

    int number = number + 1;

To step through the array, set number to zero

int number = 0;

before entering the loop then increment number with

number = number + 1;
于 2013-05-17T12:48:02.690 回答