【发布时间】: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