public static void main(String[] args) {
int i;
ArrayList apartment = new ArrayList();
ArrayList area = new ArrayList();
ArrayList lightbulb = new ArrayList();
ArrayList windows = new ArrayList();
System.out.println("Введите количество квартир в здании.");
Scanner sc = new Scanner(System.in);
int house = sc.nextInt();
apartment.add("");
area.add("");
lightbulb.add("");
windows.add("");
for (i=1; i<=house; i++){
Apartments home = new Apartments();
System.out.println("Введите площадь квартиры " + i);
Scanner S = new Scanner(System.in);
home.area = S.nextDouble();
area.add(home.area);
System.out.println("Введите колич1ество окон в квартире " + i);
Scanner W = new Scanner(System.in);
home.windows = W.nextInt();
windows.add(home.windows);
System.out.println("Введите количество лампочек в квартире " + i);
Scanner L = new Scanner(System.in);
home.lightbulb = L.nextInt();
lightbulb.add(home.lightbulb);
}
for(i=1; i<=house; i++)
System.out.println("Площадь квартиры " + i + "составляет " + area.get(i));
System.out.println("Количество окон в квартире равно: " + windows.get(i));
System.out.println("Количество лампочек в квартире равно: " + lightbulb.get(i));
}
你好everebody!我无法理解这段代码中的错误。我收到这个错误:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
at java.util.ArrayList.rangeCheck(ArrayList.java:657)
at java.util.ArrayList.get(ArrayList.java:433)
at Planning.main(Planning.java:37)
IDEA在这部分System.out.println("Количество окон в квартире равно: " + windows.get(i));
显示错误,但仍然无法理解错误
答案 0 :(得分:2)
你忘记了println语句周围的卷曲括号:
for(i=1; i<=house; i++)
System.out.println("Площадь квартиры " + i + "составляет " + area.get(i));
System.out.println("Количество окон в квартире равно: " + windows.get(i));
System.out.println("Количество лампочек в квартире равно: " + lightbulb.get(i));
因此,第二个和第三个println-statemt在for循环之后运行,而我现在是house + 1,这导致超出范围异常。
答案 1 :(得分:1)
首先,在底部有你的最终打印语句,你只是迭代第一个print语句,因为你没有任何括号用于循环。我建议在循环中使用一个范围变量,这样如果你试图在for循环范围之外使用它就会告诉你它没有被声明,它可以避免像这样的混乱
for(int i=1; i<=house; i++) {
...
}
其次,将""
添加到每个列表似乎非常多余,所以你可能应该删除它。数组列表是零索引的,因此使用list.get(0)
访问第一个索引,这可能会消除对这些添加的需要。如果您仍然希望用户输入1,那么您在访问时可以减去1:list.get(house - 1)
。
第三,如果你确实删除了那些不需要的添加,你可以从0开始遍历列表,
for(i=0; i<house; i++) {
System.out.println("Площадь квартиры " + i + "составляет " + area.get(i));
System.out.println("Количество окон в квартире равно: " + windows.get(i));
System.out.println("Количество лампочек в квартире равно: " + lightbulb.get(i));
}
最后,由于您每次都在home
变量中存储相同的信息,因此这些多个列表似乎非常冗余。我假设ArrayList公寓旨在存储这些,但你没有使用它。因此,而不是所有这些单独的列表,只需将home
存储在公寓列表中,并在需要时访问它的字段。这也是非常有效的,因为你可以获取一次回家,因为从列表中获取是一个相对昂贵的操作,访问它的字段将显着提高效率。此外,您可以使用相同的扫描仪。
public static void main(String[] args) {
ArrayList apartment = new ArrayList();
System.out.println("Введите количество квартир в здании.");
Scanner sc = new Scanner(System.in);
int house = sc.nextInt();
for (int i=1; i<=house; i++) {
Apartments home = new Apartments();
System.out.println("Введите площадь квартиры " + i);
home.area = sc.nextDouble();
System.out.println("Введите колич1ество окон в квартире " + i);
home.windows = sc.nextInt();
System.out.println("Введите количество лампочек в квартире " + i);
home.lightbulb = sc.nextInt();
apartment.add(home)
}
for(int i=0; i<house; i++) {
Apartments home = apartment.get(i);
System.out.println("Площадь квартиры " + i + "составляет " + home.area);
System.out.println("Количество окон в квартире равно: " + home.windows);
System.out.println("Количество лампочек в квартире равно: " + home.lightbulb);
}
}