【问题标题】:Adding increments to an array?向数组添加增量?
【发布时间】:2015-10-03 05:55:23
【问题描述】:

所以我目前正在尝试在我的程序中使用一个数组,并让它在每次值在设定范围内时加 1。

/** Imports **/
import java.util.Scanner;
import java.util.Random;

/** Main code **/
public class DropRate2
{
public static void main(String[] args)
{
    double min, max;
    min = 0;
    max = 1;
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter a case type:");
    String userinput = scan.nextLine();
    Random rand = new Random();
    int Drops[] = {1, 2, 3, 4, 5};

    /** SHADOW **/
    if (userinput.equalsIgnoreCase("Shadow"))
    {
        System.out.println("You chose the " + userinput + " case.\n");
        System.out.println("How many cases do you wish to open?");
        int loops = scan.nextInt();
        System.out.println("Opening " + loops + " cases!");
        for (int i = 0; i < loops; i++)
        {
            double chance = min + (max - min) * rand.nextDouble();
            if (chance >= .769)
                Drops[0] ++;
            else if (chance >= .0259 && chance <= .758)
                Drops[1] ++;
            else if (chance >= .0169 && chance <= .258)
                Drops[2] ++;
            else if (chance >= .0089 && chance <= .0168)
                Drops[3] ++;
            else if (chance >= 0 && chance <= .0088)
                Drops[4] ++;
        }
        System.out.println("You got " + Drops[0] + " blues.");
        System.out.println("You got " + Drops[1] + " purples.");
        System.out.println("You got " + Drops[2] + " pinks.");
        System.out.println("You got " + Drops[3] + " reds.");
        System.out.println("You got " + Drops[4] + " yellows.");
    }
}

还有一个最后的大括号用来关闭类本身,只是出于某种原因没有在这里格式化

我现在不确定问题出在哪里。我不确定问题出在数组本身还是代码的其余部分。 当我运行这个时,只有 ONE 的数组组应该增加一个增量。这样,例如,如果我打开 10 个,总共应该只有 10 个,根据机会分布在各处。 当我运行这个时,我每个都有很多,例如紫色 5 个,黄色 8 个,等等。

【问题讨论】:

  • 无法理解你到底想做什么???
  • 将 1 添加到 Drops 时究竟会发生什么?
  • Drops 数组在哪里定义?您如何打印阵列?只要 Drops 在正确的范围内,并且满足您的 if 条件,Drops[x]++ 就会按照您的意愿行事。
  • 如果您想要介于 0 和 1 之间的值,那么使用 min 和 max 的方式是没有意义的。只需写 double chance = rand.nextDouble(); 代替。有时也不会增加数组中的任何数字。例如如果机会是 .7585

标签: java arrays integer increment


【解决方案1】:

您正在初始化数组以包​​含 1 到 5:

int Drops[] = {1, 2, 3, 4, 5};

您可能希望从 0 开始,您可以明确地这样做:

int Drops[] = {0, 0, 0, 0, 0};

或简单地隐含:

int Drops[5];

这应该是您的问题的主要原因。您的条件也有问题,因为一个值可能介于一个范围的低值和下一个范围的高值之间。最好只指定低值,因为您已经在使用else if

    if (chance >= .769)
        Drops[0] ++;
    else if (chance >= .0259)
        Drops[1] ++;
    else if (chance >= .0169)
        Drops[2] ++;
    <etc>

【讨论】:

  • 太棒了!做了一些问题解决和改变,一切都很好!非常感谢:-)
【解决方案2】:

只有一件事可能是错的;一切似乎都很好。

一种可能性是您使用 same 随机序列创建 Random。这是一条以重复方式测试的规定:

Random rand = new Random(13); // The thirteenth random sequence.

最好做

Radnom rand = new Random();

结果是1、2、3、4是由于机会的分布。

减少 loops 以减少统计平均值。

【讨论】:

  • 如果您查看更新后的代码,您会发现我确实使用了Random rand = new Random()
【解决方案3】:

你的数组初始化有误吗?还是打印错了?这对我来说似乎工作得很好。

    int[] Drops = new int[5];
    Random rand = new Random();
    int max = 10;
    int min = 5;
    for (int i = 0; i < 3; i++)
    {
        double chance = min + (max - min) * rand.nextDouble();
        if (chance >= .769)
            Drops[0] ++;
        else if (chance >= .0259 && chance <= .758)
            Drops[1] ++;
        else if (chance >= .0169 && chance <= .258)
            Drops[2] ++;
        else if (chance >= .0089 && chance <= .0168)
            Drops[3] ++;
        else if (chance >= 0 && chance <= .0088)
            Drops[4] ++;
    }

    for (int i=0; i<5; i++) {
        System.out.println(Drops[i]);
    }

【讨论】:

  • 如果我发布我的整个代码可能会有所帮助,但我仍然不确定它有什么问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 2020-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多