向数组添加增量?
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>
所以我目前正在尝试在我的程序中使用一个数组,并让它在每次一个值在集合中时加 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>