java - 每个循环将 1 添加到数组索引
问题描述
所以,我正在解决一个问题,让我添加两个骰子“X”次,然后将频率记录在一个数组中,这就是我所拥有的
int [] counters = new int [11];
for (int i = 0; i <1001; i++){
//have to add +1 so I don't get 0
++counters[((die1.nextInt(6)+1)+(die2.nextInt(6)+1))];
}
System.out.print(counters);
我收到了这个错误:java.lang.ArrayIndexOutOfBoundsException: 12
解决方案
//have to add +1 so I don't get 0
不,你真的没有。
在 Java 中,数组是从 0 开始的。意思是 11 个元素的数组有索引0
......10
Random.nextInt(n)
返回一个 和 之间的0
值n-1
。
因此,表达式((die1.nextInt(6)+1)+(die2.nextInt(6)+1))
将介于2
...之间12
。
要么将数组的大小增加到 13 以便12
适合(前 2 个元素将保持未使用状态),要么简单地删除+1
's:
Random die1 = new Random(), die2 = new Random();
int [] counters = new int [11];
for (int i = 0; i <1001; i++){
++counters[die1.nextInt(6)+die2.nextInt(6)];
}
您也不能使用 print() 打印数组。一种可能的解决方案是单独打印每个元素:
for (int i = 0; i < counters.length; ++i) {
System.out.print((i+1) + ":" + counters[i] + " ");
}
System.out.println();
推荐阅读
- string - 从Powershell中的字符串添加哈希表中的条目
- reactjs - React Native Props not Rendering to the next scene
- firebase - 从 Flutter Firebase 的子集合中获取数据时出错
- javascript - 如何同时添加两个 Flickity 插件?
- ios - SwiftUI - 视图获取隐藏在导航栏下
- kubernetes - 将 grafana v4 升级到 v5 - 还是应该跳过并直接升级到 v7?
- php - PHP HTTP Guzzle 客户端 - 如何使用 Guzzle Streams 解析 JSON 数组
- android - Android react-native中的https连接在构建后无法在物理设备上运行
- spring - 我可以在 spring servlet 过滤器中使用 RequestHeader 注释吗?
- java - Java:为什么堆溢出不会触发堆转储?