我在JAVA中编写了以下代码。
package threed;
import java.util.Scanner;
public class Threed_Array {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int b1,b2,b3;
System.out.print("Enter the number of elements in 1st bracket->");
Scanner sc=new Scanner(System.in);
b1=sc.nextInt();
System.out.print("Enter the number of elements in 2nd bracket->");
b2=sc.nextInt();
System.out.print("Enter the number of elements in 3rd bracket->");
b3=sc.nextInt();
int threedarray[][][]=new int[b1][b2][b3];
for(int i=1; i<=b1; i++)
{
for(int j=1; i<=b2; j++)
{
for(int k=1; i<=b3; k++)
{
System.out.print("Enter element->");
threedarray[i][j][k]=sc.nextInt();
}
}
}
for(int i=1; i<=b1; i++)
{
for(int j=1; i<=b2; j++)
{
for(int k=1; i<=b3; k++)
{
System.out.print(" "+threedarray[i][j][k]);
}
}
}
}
}
我收到此代码的ArrayIndexOutOfBoundsException。这显示在以下行中:
threedarray[i][j][k]=sc.nextInt();
有人可以帮我解决发生错误的地方吗?谢谢。
答案 0 :(得分:3)
您应始终从索引0开始,它是数组第一个元素的索引:
for(int i=0; i<b1; i++)
{
for(int j=0; j<b2; j++)
{
for(int k=0; k<b3; k++) {
System.out.print("Enter element->");
threedarray[i][j][k]=sc.nextInt();
}
}
}
for(int i=0; i<b1; i++)
{
for(int j=0; j<b2; j++)
{
for(int k=0; k<b3; k++)
{
System.out.print(" "+threedarray[i][j][k]);
}
}
}
进一步使用<
而非<=
使用最后一个循环访问数组元素n + 1,其中n是该数组的大小。这就是例外的原因。
答案 1 :(得分:2)
我会说你的循环中的条件不正确:
for(int i=1; i<=b1; i++)
{
for(int j=1; i<=b2; j++)
{
for(int k=1; i<=b3; k++)
{
它应该是:
for(int i=1; i<=b1; i++)
{
for(int j=1; j<=b2; j++)
{
for(int k=1; k<=b3; k++)
{
此外,你应该从0开始。
答案 2 :(得分:1)
我认为您希望j
圈内的k
和for
代替i
圈而不是for(int i=0; i<b1; i++)
{
for(int j=0; j<b2; j++)
{
for(int k=0; k<b3; k++)
{
...
}
}
}
。此外,Java中的数组从索引0开始,因此它应如下所示:
{{1}}
答案 3 :(得分:1)
Java中的数组是从零开始的,尝试从0迭代到b1-1:
for(int i=0; i<b1; i++)
{
for(int j=0; i<b2; j++)
{
for(int k=0; i<b3; k++)
{
System.out.print("Enter element->");
threedarray[i][j][k]=sc.nextInt();
}
}
}
答案 4 :(得分:0)
[b1][b2][b3]
使用输入b1
,b2
,b3
创建的数组长度为bx
,但从0
下标到bx-1
。因此,您必须从0
循环到bx-1
答案 5 :(得分:0)
指数从0
开始,而不是1
。在for
开始您的三个0
循环,并迭代到比提供的数字少一个:
for(int i = 0; i < b1; i++)
{
for(int j = 0; i < b2; j++)
{
for(int k = 0; i < b3; k++)
{
System.out.print(" "+threedarray[i][j][k]);
}
}
}
答案 6 :(得分:0)
除了数组索引问题(参见Stefan Beike's answer)之外,您还可以ArrayList。
这样可以避免向用户询问矩阵中要包含的元素数量。
如果你想保留原始数组,你可以使用System.arrayCopy重新分配到更大的数组。
答案 7 :(得分:0)
这里的问题是你分别从1开始循环到b1,b2,b3。数组索引从0开始而不是从1开始,以数组的大小结束 - 1.因此,要修复代码,您需要将代码修改为以下内容:
for(int i = 0; i < b1; i++) {
for(int j = 0; j < b2; j++) {
for(int k = 0; k < b3; k++) {
System.out.print("Enter element->");
threedarray[i][j][k]=sc.nextInt();
}
}
}
更一般地说,如果您不知道要循环的数组的长度/大小,则可以使循环更一般地小于数组长度。所以它将是我&lt; threedarray.length和j&lt; threedarray [i] .length和k&lt; threedarray [i] [j]。长度。
关键的想法是数组索引从0开始并以其大小/长度结束 - 1,因此要获取最后一个元素,您访问数组[array.length-1]并访问第一个访问数组的元素[ 0]
希望这能回答你的问题。