我的代码出了什么问题?迭代2d数组

时间:2013-10-08 06:45:16

标签: java arrays

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号门

5 个答案:

答案 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

    }