我在完成任务时遇到了一些麻烦。关键是要创建一个程序,它将生成一个介于0和1之间的随机数,然后如果是头,则将“h”保存到数组中的下一个空闲空间,如果是尾部则保存“s”。问题是,当我运行程序时,它给我一个错误“线程中的异常”主“java.lang.ArrayIndexOutOfBoundsException:2”,因为(我认为)它一直到达数组的末尾,任何人都可以帮助?
import java.util.Random;
public class CoinToss{
public int heads;
public int tails;
public int totalToss;
public int arraySize;
public int numOfTails = 0;
public int numOfHeads = 0;
public String [] array = new String[arraySize];
public CoinToss(int NumberOfTosses) {
arraySize = NumberOfTosses;
}
public int getHeads() {
return heads;
}
public int getTails() {
return tails;
}
public int totalTosses() {
return totalToss;
}
public void tossCoin() {
for (int i = 0; i <= arraySize; i++) {
double randomNumber = Math.random();
if (randomNumber < 0.5) {
array[arraySize] = "t";
numOfTails++;
} else {
for (int j = 0; j <= arraySize; j++) {
if (randomNumber >= 0.5) {
array[arraySize] = "h";
numOfHeads++;
}
}
}
}
}
}
和测试者类:
import java.util.Scanner;
public class CointTossTester {
public static void main (String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("Number of tosses ");
int number = sc.nextInt();
CoinToss coin = new CoinToss(number);
coin.tossCoin();
System.out.println("Ight deez niggers be: " +coin.array);
}
}
谢谢!
答案 0 :(得分:1)
public void tossCoin() {
for (int i = 0; i <= arraySize; i++) {
double randomNumber = Math.random();
您未正确实例化arraySize
。
编辑(感谢下面的评论):
首先要做的事情:
当您为CoinToss
课程声明属性时,您的arraysize
默认为0,但接下来的两行中您声明String [] array = new String[arraySize]
。这意味着您的数组被声明为大小为0的数组。
要解决这个特定问题,您必须在类字段声明中将public String [] array = new String[arraySize]
拆分为public String [] array;
,并在构造函数中将array = new String[arraySize]
拆分为public class CoinToss {
public int heads;
public int tails;
public int totalToss;
public int arraySize;
public int numOfTails = 0;
public int numOfHeads = 0;
public String[] array;
public CoinToss(int NumberOfTosses) {
arraySize = NumberOfTosses;
array = new String[arraySize];
}
// rest of the code
}
。所以它看起来像是:
public void tossCoin() {
for (int i = 0; i <= arraySize; i++) {
double randomNumber = Math.random();
if (randomNumber < 0.5) {
array[arraySize] = "t";
numOfTails++;
} else {
for (int j = 0; j <= arraySize; j++) {
if (randomNumber >= 0.5) {
array[arraySize] = "h";
numOfHeads++;
}
}
}
}
}
这解决了一个问题。
第二个是你在tossCoin方法的代码中进一步说明:
for (int i = 0; i <= arraySize; i++) {
并且线条:
for (int j = 0; j <= arraySize; j++) {
和load("@bazel_skylib//:lib.bzl", "paths")
def java_testng(file, deps=[], size="small", **kwargs):
native.java_library(
name = paths.split_extension(file)[0] + "-lib",
deps = [
"//third_party:org_testng_testng"
] + deps,
srcs = [file]
)
native.java_test(
name = paths.split_extension(file)[0],
use_testrunner=False,
main_class='org.testng.TestNG',
runtime_deps = [
"//third_party:org_testng_testng",
paths.split_extension(file)[0] + "-lib"
],
data = [file],
size = size,
args=["-testclass $(location " + file + ")"],
**kwargs
)
是错误的,因为在某个时刻您正在访问数组的第5个元素,当它的最后一个索引是4时。
答案 1 :(得分:1)
主要问题是没有使用正确的变量来放置&#34; h&#34;或&#34; t&#34;数组中的值。你使用:
array[arraySize] ...
但是,arraySize
是数组的大小。您需要使用变量i
,这是循环计数器:
array[i] = "t"; // or "h", depending.
您还没有执行正确的循环次数:
for (int i = 0; i <= arraySize; i++) {
由于您已指出<=
,这意味着您可以达到阵列的大小。但由于数组索引从0开始,你应该使用:
for (int i = 0; i < arraySize; i++) { // notice "<" instead of "<="
我还建议只有在构造函数中获得arraySize的值后才初始化String数组:
public CoinToss(int NumberOfTosses) {
arraySize = NumberOfTosses;
array = new String[arraySize];
}
答案 2 :(得分:1)
将array
的初始化更改为与所有其他人一样的声明:
public String [] array;
然后,更改构造函数,使其正确初始化array
:
public CoinToss(int NumberOfTosses) {
arraySize = NumberOfTosses;
array = new String[arraySize];
}
您的for
循环从0
转到arraySize
(比最后一个索引多一个,所以它不会起作用)。它应该转到arraySize-1
,这会将其更改为:
for (int i = 0; i < arraySize; i++) {
此外,您不应该使用arraySize
来访问array
,而是i
,这是您的循环变量,如下所示:
array[i] = "t";
现在,你不需要另一个循环,也不需要第二个条件,随机数低于0.5或更高,你可以相应地设置它,如下所示:
if (randomNumber < 0.5) {
array[i] = "t";
numOfTails++;
} else {
array[i] = "h";
numOfHeads++;
}
最后,打印一个数组并不像将它与字符串连接一样简单,你应该通过它或者使用另一个实用程序(我个人喜欢Arrays.toString
方法)打印它,如下所示:< / p>
System.out.println("Ight deez niggers be: " +Arrays.toString(coin.array));
这里有一个working example [注意:我将main
方法放在Coin
类