import java.util.Scanner;
public class StreetPeople {
private static Scanner keyboard = new Scanner(System.in);
public static void main(String [] args){
int houses;
int houseNumbers[];
int count;
int houseAges[][] = new int[4][];
int age;
int people;
System.out.print("How many houses on the street? : ");
houses = keyboard.nextInt();
houseNumbers= new int[houses];
for (count= 0; count < houses; count++) {
System.out.print("What is the next house number? : ");
houseNumbers[count] = keyboard.nextInt();
}
for (count = 0; count < houseNumbers.length ; count++) {
System.out.print("How many people live in number "+ houseNumbers[count] + ": ");
people = keyboard.nextInt();
houseAges[count] = new int[people];
for (int i = 0 ; i < houseAges.length ; i++) {
System.out.print("What is the age of person " + (i+1) + ":");
age = keyboard.nextInt();
houseAges = new int[people][age];
}
}
}
}
这是控制台窗口输出(我猜测它是由堆栈溢出压缩的):
How many houses on the street? : 4
What is the next house number? : 1
What is the next house number? : 3
What is the next house number? : 4
What is the next house number? : 6
How many people live in number 1: 5
What is the age of person 1: 32
What is the age of person 2: 28
What is the age of person 3: 12
What is the age of person 4: 8
What is the age of person 5: 5
How many people live in number 3: 1
What is the age of person 1: 84
How many people live in number 4: 5
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at StreetPeople.main(StreetPeople.java:31)
代码完全正常,直到那里。完全不知道为什么它适用于多次迭代,但不适用于4号门
答案 0 :(得分:1)
houseAges只有4行。
int houseAges[][] = new int[4][];
答案 1 :(得分:1)
int houseAges[][] = new int[4][];
//这是问题
将更改修改为如下所示
System.out.print("How many houses on the street? : ");
houses = keyboard.nextInt();
houseNumbers= new int[houses];
houseAges = new int[houses][]; //here you need to initialize houseAges
从代码中删除以下行
houseAges[count] = new int[people];
答案 2 :(得分:1)
这里是一个固定的尺寸。当你拨打下一个号码并收到错误时。
int houseAges[][] = new int[4][];
答案 3 :(得分:1)
这是你的问题:
houseAges = new int[people][age];
您完全重新初始化houseAges
数组
现在,因为在你的第三宫你选择了1个人,然后用一个人初始化你的数组,这使得第二个索引上的循环崩溃(因为现在houseAges
第一个维度的大小为1)
答案 4 :(得分:1)
循环中的问题
for (int i = 0 ; i < houseAges.length ; i++) {
System.out.print("What is the age of person " + (i+1) + ":");
age = keyboard.nextInt();
houseAges = new int[people][age]; // i guess it should be houseAges[people][i] = age; no need to reallocate the entire array in every iteration
}