【问题标题】:Getting Array Index Out of Bounds Exception for one text file, but not for another similar file in Java?一个文本文件的数组索引越界异常,但Java中的另一个类似文件却没有?
【发布时间】:2016-08-22 11:33:02
【问题描述】:

所以我编写了这个程序,它接收一个文本文件,获取该文件中的数据并放入一个 2D 字符数组中,以便以各种方式打印到屏幕上。我拥有的一个文件可以完美运行,但是,在尝试“对角线”打印第二个文件时出现问题。首先,这是第一个更简单的文件,它可以正常工作:

5 4
FILE
WITH
SOME
MORE
INFO

在这两个文件中,前两个整数分别表示将为二维字符数组创建的行数和列数。接下来,这里是这个文件“testfile.txt”的部分代码和代码的结果:

public static void main(String[] args) throws IOException
{
    char[][] charArray = readFile();

    printArray(charArray);
    printVerticalArray(charArray);
    printHorizontalArray(charArray);
    printDiagonalArray(charArray);
}

public static char[][] readFile() throws IOException
{
    File myFile = new File("monalisa.txt");
    Scanner inputFile = new Scanner(myFile);

    int rows, columns;
    rows = inputFile.nextInt();
    columns = inputFile.nextInt();

    String[] strArray = inputFile.nextLine().split(" ");

    char[][] array = new char[rows][columns];

    for(int i = 0; i < rows; i++)
    {
        array[i] = inputFile.nextLine().toCharArray();
    }
    return array;
}
.
.
.
public static void printDiagonalArray(char[][] cArray)
{
    for(int i = 0; i < 1; i++)
    {
        for(int c = cArray[i].length - 1; c >= 0; c--)
        {
            for(int r = cArray[c].length; r >= 0; r--)
            {
                System.out.print(cArray[r][c]);
            }
            System.out.println();
        }
        System.out.println();
    }
}

结果:

Original Text: 

FILE
WITH
SOME
MORE
INFO

Transformations: 

INFO
MORE
SOME
WITH
FILE


ELIF
HTIW
EMOS
EROM
OFNI


OEEHE
FRMTL
NOOII
IMSWF

所以这正是程序应该如何工作的,但是,每当我尝试将第二个文件“monalisa.txt”放入程序中时,我就会得到数组越界异常,我不知道为什么。这是原始的第二个文本文件(这是一个 Google Drive 链接,因为它太大而无法在此处显示):https://drive.google.com/open?id=0BwujWiqVRKKsajlKV1NIWG1uQVU

下面是这个文本文件的程序结果:https://drive.google.com/open?id=0BwujWiqVRKKsUnZYQTU4YmZDWUE

代码中的第 78 行是:

for(int r = cArray[c].length; r >= 0; r--)

那么有人会碰巧知道为什么会这样吗?感谢所有阅读所有这些内容的人!

【问题讨论】:

  • 看起来你的数组索引弄错了:System.out.print(cArray[r][c]); 应该是 System.out.print(cArray[c][r]);
  • @AndyTurner 我试过了,但发生了完全相同的异常:/
  • 还有r = cArray[c].length - 1

标签: java arrays exception indexoutofboundsexception


【解决方案1】:

排队

for(int r = cArray[c].length; r >= 0; r--)

您没有正确设置 r 的初始值。您不应该检查当前列中的行数,但一般来说,行数对于每一列都是相等的。将此行更改为

for(int r = cArray.length-1; r >= 0; r--)

【讨论】:

    猜你喜欢
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多