向数组添加增量?

Adding increments to an array?

所以我目前正在尝试在我的程序中使用一个数组,并让它在每次一个值在集合中时加 1 运行ge。

/** 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.");
    }
}

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

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

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

一种可能是您使用 相同 随机序列创建随机数。这是一个重复测试的规定:

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

最好

Radnom rand = new Random();

结果是1,2,3,4是概率分布的结果

减少 loops 以减少统计平均。

你是不是初始化数组有误?还是打印错了?它对我来说似乎很好用。

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

您正在初始化数组以包​​含 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>