print语句中的IndexOutOfBoundsException

时间:2017-10-08 02:53:12

标签: java indexoutofboundsexception


我有一个触发异常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

3 个答案:

答案 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并继续调试。