【问题标题】:Counting 100 Random Numbers计算 100 个随机数
【发布时间】:2017-04-22 02:41:06
【问题描述】:

我正在尝试生成 0 到 9 之间的 100 个随机数,并显示每个数字的计数

这个解决方案正确吗?我想改进,我可以做得更好吗?

java.util.Scanner k = new Scanner(System.in);

int[] numbers = new int[100];

for (int i = 0;i<numbers.length;i++)
{
    numbers[i] = (int) (Math.random() * 10);
}

int [] counts = new int[10];

for (int i = 0;i<numbers.length;i++)
{
    counts[numbers[i]%numbers.length]++;
}

for (int i=0;i<counts.length;i++)
{
    if (counts[i]>1)
        System.out.println(i+1+" Generates: "+(counts[i])+" times");
    else
        System.out.println(i+1+" Generated: "+(counts[i])+" time");
}

【问题讨论】:

  • 除非您的代码有问题/错误,否则通常最好在 CodeReviw 上发布此类问题:codereview.stackexchange.com
  • 请澄清标题。
  • 我投票结束这个问题,因为它属于Code Review

标签: java arrays for-loop random


【解决方案1】:

我认为你想多了,你只需要一个数组 - 10 值(对于范围 0 - 9 有十个唯一值),在该范围内生成一百个值,并增加数组中的值(即您的数字计数),然后循环显示。类似的,

int[] numbers = new int[10];
for (int i = 0; i < 100; i++) {
    int ndx = (int) (Math.random() * numbers.length);
    numbers[ndx]++;
}
for (int i = 0; i < numbers.length; i++) {
    System.out.printf("%d was generated %d times.%n", i, numbers[i]);
}

在 Java 8+ 中,您可以使用 IntStream 和 lambda(s) 来编写上述代码

int[] numbers = new int[10];
IntStream.range(0, 100).forEach( //
        x -> numbers[(int) (Math.random() * numbers.length)]++);
IntStream.range(0, numbers.length) //
        .forEachOrdered(x -> System.out.printf( //
                "%d was generated %d times.%n", x, numbers[x]));

【讨论】:

  • 哇,很棒的解决方案,您一定是专业人士!
猜你喜欢
  • 2019-03-18
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
  • 2021-11-16
  • 2015-09-22
相关资源
最近更新 更多