Java 获取相反的数字或获取IndexOutOfBoundException
当字符串布局如下所示时:Java 获取相反的数字或获取IndexOutOfBoundException,java,Java,当字符串布局如下所示时: String layout = "b....\n"+ ".....\n"+ "....b\n"+ ""; 然后我的代码读取的行数和列数完全错误。对于行号,它向我显示列号,反之亦然。对于上面的示例,行数为3,列数为5。但当测试一些示例和/或相反的数字而不是行数时,我得到了indexOutOfBoundsException,它显示的是列数,而不是列数。smb可以看看代码的逻辑吗 public static Shape mak
String layout =
"b....\n"+
".....\n"+
"....b\n"+
"";
然后我的代码读取的行数和列数完全错误。对于行号,它向我显示列号,反之亦然。对于上面的示例,行数为3,列数为5。但当测试一些示例和/或相反的数字而不是行数时,我得到了indexOutOfBoundsException,它显示的是列数,而不是列数。smb可以看看代码的逻辑吗
public static Shape makeShape(String layout,char displayChar)
{
Shape passLayout;
int rows = 0;
int cols = 0;
String line = "";
String firstLine = "";
String lastLine = "";
Scanner data = new Scanner(layout);
firstLine = data.nextLine();
while(data.hasNextLine())
{
line = data.nextLine();
cols = line.length();
rows++;
}
//line = data.nextLine();
lastLine = line;
if((firstLine.charAt(0) == '.' && lastLine.charAt(0) == '.') ||
(firstLine.charAt(cols) == '.' && lastLine.charAt(cols) == '.'))
throw new FitItException("OOPS! Empty borders!");
else
passLayout = new CreateShape(rows, cols, displayChar, layout);
return passLayout;
注意:条件if语句检查空字符“.”,即形状的布局字符串必须在第0行、第0列、最后一行和最后一列中至少有一个填充块 我不知道代码会在哪里混合行和列的值,但我确实看到了indexOutOfBoundsException的可能原因。尝试更改您的if语句:
if((firstLine.charAt(0) == '.' && lastLine.charAt(0) == '.') ||
(firstLine.charAt(cols-1) == '.' && lastLine.charAt(cols-1) == '.'))
throw new FitItException("OOPS! Empty borders!");
由于基于0的索引,最后一个字符的位置将始终比列数少一个。在调用lastLine.charAt0之前添加额外的检查lastLine.length>0