我有一个触发异常IndexOutOfBoundsException
的print语句。这是代码:
主要方法
public class AdvDotComLauncher {
public static void main(String[] args) {
AdvDotComTable table = new AdvDotComTable();
table.createTable(5,5);
}
}
TABLE CLASS
import java.util.ArrayList;
public class AdvDotComTable {
public boolean createTable(int rows, int columns) {
if (rows == 26) {
//When true is returned, the program will let the user know they have to choose a lower number
return true;
}
String[] dotComs = {"Pets.com", "Amazon.com", "Target.com", "Apple.com", "Microsoft.com", "Steampowered.com"};
ArrayList<Character> row = new ArrayList<Character>();
ArrayList<Integer> column = new ArrayList<Integer>();
char[] letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
int number = 0;
int rows2 = rows;
int columns2 = columns;
while (rows2 != 0 && columns2 != 0) {
row.add(letters[number]);
if(number == columns) {
column.add(number);
number = 0;
columns2--;
}
System.out.println(row.get(number) + "" + column.get(number));
number++;
rows2--;
}
return false;
}
}
错误
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 0 out-of-bounds for length 0
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
at java.base/java.util.Objects.checkIndex(Objects.java:372)
at java.base/java.util.ArrayList.get(ArrayList.java:439)
at AdvDotComTable.createTable(AdvDotComTable.java:23)
at AdvDotComLauncher.main(AdvDotComLauncher.java:4)
我不知道是什么导致了这个问题,任何帮助都将不胜感激。我是一个只是想学习的业余开发人员,所以这可能是一个愚蠢的错误(抱歉)。
提前谢谢,
LYFE
答案 0 :(得分:0)
很明显你的代码
System.out.println(row.get(number) + "" + column.get(number));
会失败。
与此代码之前一样,您正在将值添加到行列表中的索引号,但列列表仍为空且没有元素。如果列表没有元素,则应该有例外。就像下面的代码一样
List test = new ArrayList();
System.out.println(test.get(0));
答案 1 :(得分:0)
ArrayList's get方法的API在此方面已经足够清楚了。
抛出: IndexOutOfBoundsException - 如果索引超出范围(索引&lt; 0 || index&gt; = size())
在您的情况下,索引&gt; = size()就是正在发生的事情。
答案 2 :(得分:0)
为了更好地了解代码何时失败,您可以在某些时候调试代码。这对新开发人员学习和理解正在发生的事情非常有帮助。
您还可以查看解释并转到鳕鱼失败的地方。第23行出现错误的开始。
System.out.println(row.get(number) + "" + column.get(number));
你得到了IndexOutOfBoundException
。这告诉你,在某些时候你试图超越数组的大小限制。所以,你可以做些什么来获得一些时间在这里调试点,并添加一个案例进入调试,其中行或列大于或等于26并继续调试。