2012-09-13 25 views
0

我试图从文本文件中读取一个网格来构建一个图表。Java String.charAt()无法正常工作

目标节点用X表示,而其他节点用.表示。

我也有行数和列数。所以,我基本上只是尝试读取每行的下一行,然后通过传递列位置的迭代器并在X上检查它是否应该标记为目标节点。

goalGraph = new int[rows][cols]; 
for (int i = 0; i < rows; i++) { 
    String readLine = in.nextLine(); 
    System.out.println(readLine); 
    for (int ii = 0; ii < cols; ii++) { 
     char c = readLine.charAt(ii); 
     if (c == 'x') { 
      goalGraph[i][ii] = 1; 
     } 
     else { 
      goalGraph[i][ii] = 0; 
      System.out.print("."); 
     } 
    } 
} 

,但我一直在index (0)得到一个arrayoutofbounds错误。

另一个奇怪的事情是,它不打印readLine当下代码实现的,但服用它,所以它看起来像:

goalGraph = new int[rows][cols]; 
for (int i = 0; i < rows; i++) { 
    String readLine = in.nextLine(); 
    System.out.println(readLine); 
    /** 
    for (int ii = 0; ii < cols; ii++) { 
     char c = readLine.charAt(ii); 
     if (c == 'x') { 
      goalGraph[i][ii] = 1; 
     } 
     else { 
      goalGraph[i][ii] = 0; 
      System.out.print("."); 
     } 
    } 
    **/ 
} 

其结果是,被读取的线被打印,并且我得到正确的字符串:

X..... 

...X.. 

...... 

.X.... 

任何人都可以指向正确的方向吗?

谢谢!

+1

您能向我们展示您正在从文本文件中读取的“网格”吗? – Killrawr

+0

它看起来像“X ....”等......我在帖子中没有线条之间的空白。 我不知道为什么它不让我做多行,所以我不得不打两次“输入”。 – user1667270

+0

它对我来说没有任何意义,因为如果我像第二个代码示例中那样删除整个char块,print语句开始工作并显示该行确实正在被正确读取。 然而,被注释掉的块在print语句下面,所以我不知道为什么当代码没有被注释掉时,至少第一个print语句不工作。 – user1667270

回答

1

您显示的代码没有任何明显的错误。我们需要看到更多。可能发生的情况是您的输入中实际上没有rows行数据。如何生成rowscolsin是什么类型,它是如何初始化的?数组outoutbounds错误发生在哪一行?

+0

由于某种原因,我似乎无法换行,所以我为该区块道歉。 在进入此操作之前,我正在打印“行”和“列”,并且它们正在被正确读入,因此在这种情况下rows = 5和cols = 6. 它们是通过读取前两个整数值在文本文件中。 'in'是扫描仪文件被初始化为:Scanner in = new Scanner(new File(fileName)); 实际上没有指定任何行,它只是说“java.lang.StringIndexOutOfBoundsException:String index out of range:0” – user1667270

+0

如上所述,它没有任何意义,因为当我注释掉所有字符操作等等,我打印'readLine'的行,从文本文件读入行,它行得通,并显示它正在被正确读入。为什么第一次打印操作之下的代码会受到后续操作的影响?是否至少应该在所有角色诡计开始之前打印一次阅读? – user1667270

+0

@ user1667270:你应该真的得到你的异常的完整堆栈跟踪 - 它甚至可能不会在你认为是的代码中生成。如果你在命令行上运行,它应该只是打印它。如果它是一个GUI,可能会有一个日志文件,你可以从中导出完整的堆栈跟踪。 –