2012-09-13 51 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,可能會有一個日誌文件,你可以從中導出完整的堆棧跟蹤。 –