【问题标题】:Attempting to create chance calculator尝试创建机会计算器
【发布时间】:2013-05-12 15:13:13
【问题描述】:

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

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

【问题讨论】:

  • 如果您更明智地缩进,您会发现遵循自己的代码会容易得多。为什么你有一个空的if 块?您预计loop 何时在循环内 达到 1000?
  • 你需要这个数组做什么?是查看两个数字的组匹配的频率('54 22' 与 '54 22' 匹配),还是两个数字匹配的频率('22 22')?
  • 其实loop永远不会是1000
  • 你可以在for循环之后使用System.out.println("Took " + loop + " randoms.");,它会为你节省一个空的elseif &gt; break;的东西
  • 数组用于存储“匹配”发生时的循环数,以便在测试结束后计算平均值。我的意图是正确的,发帖搞砸了。

标签: java arrays loops random int


【解决方案1】:

你可能想对这条线做点什么:

    int number = number + 1;

要遍历数组,请将数字设置为零

int number = 0;

在进入循环之前增加数字

number = number + 1;

【讨论】:

  • 虽然这个错误对于任何做过一些 (Java) 编程的人来说都是显而易见的,但如果你指定 what 应该对该行做什么,它可能对初学者更有帮助。优越感并不酷。
  • 我并没有试图变得优越,我试图不去傲慢。我认为这是一个错字,而不是误解。
【解决方案2】:

这是我的代码版本:

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;

上面会创建一个新的int,叫做number,并赋予它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 循环完成时,循环将等于 999。如果您希望循环在 loop = 1000 上完成,您应该使用 @987654326 @。此外,if 条件不是必需的,因为当循环结束时,它将继续执行其下的其余代码。

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

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

【讨论】:

  • 非常感谢,这太棒了。将仔细阅读您提到的所有内容。
  • 如果您喜欢我的回答,请接受它作为问题的官方回答。
猜你喜欢
  • 1970-01-01
  • 2016-06-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
  • 1970-01-01
  • 2022-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多