得到相反的数字或得到IndexOutOfBoundException

时间:2015-04-25 06:37:37

标签: java

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 columnlast row

1 个答案:

答案 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的索引,最后一个字符的位置总是比列数少一个。