当String layout
如下:
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语句检查空字符('.'
),即形状的布局字符串必须在每个0th row
{{1}中至少有一个填充块}},0th column
和last row
。
答案 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的索引,最后一个字符的位置总是比列数少一个。