2013-10-28 49 views
-1

當涉及到通過stringBuffer解析爲2D數組時,我遇到了很多問題。從文件中取出字符串,然後將每個數字放入一個2D數組中。 (Java)

這就是我想實現....

這是我的文件中的一個例子。

123456789 
123456789 
123456789 
123456789 
123456789 
123456789 
123456789 
123456789 
123456789 

,如果我只是手動寫到Java,我會得到...

int[][] board = { 
    {1,2,3,4,5,6,7,8,9}, 
    {1,2,3,4,5,6,7,8,9}, 
    {1,2,3,4,5,6,7,8,9}, 
    {1,2,3,4,5,6,7,8,9}, 
    {1,2,3,4,5,6,7,8,9}, 
    {1,2,3,4,5,6,7,8,9}, 
    {1,2,3,4,5,6,7,8,9}, 
    {1,2,3,4,5,6,7,8,9}, 
    {1,2,3,4,5,6,7,8,9},  
}; 

但我想創造出它會爲我們的方法,看到我m在許多不同的文件中加載。

這是我的代碼。

 int[][] board = new int[9][9]; 

     File file = new File ("keiron.sud"); 
     FileReader fileReader = new FileReader(file); 
     BufferedReader bufferedReader = new BufferedReader(fileReader); 
     StringBuffer stringBuffer = new StringBuffer(); 
     String newline; 
     while ((newline = bufferedReader.readLine()) != null) { 
      stringBuffer.append(newline); 
      stringBuffer.append("\n"); 
     } 
     fileReader.close(); 
     String data = stringBuffer.toString(); 
     int counting = data.length(); 
     int counter = 0; 

     int i,j; 

     for(i = 0; i<9; i++) { 
      for (j =0; j < 9; j++) { 
       int numbers = data.charAt(counter); 
       counter++; 

      board[i][j] = numbers; 

      } 
     } 
     Print(board); 

這是我得到

49 50 51 52 53 54 55 56 57 
10 49 50 51 52 53 54 55 56 
57 10 49 50 51 52 53 54 55 
56 57 10 49 50 51 52 53 54 
55 56 57 10 49 50 51 52 53 
54 55 56 57 10 49 50 51 52 
53 54 55 56 57 10 49 50 51 
52 53 54 55 56 57 10 49 50 
51 52 53 54 55 56 57 10 49 

這實際上是沒有意義的輸出!

我對Java相當陌生,所以請你能解釋一下5歲的事情!

謝謝

CodeMonkey

+0

的空間不要在添加到您的問題。發佈它作爲我的答案的評論,我會幫你修復它。 – SudoRahul

回答

0

既然你這樣做

int numbers = data.charAt(counter); // char to int 

你得到的數字的ASCII values

在LHS上,你有一個int,在RHS上你有一個方法charAt(),它返回一個char。因此,RHS上字符的ASCII值被分配給LHS上的int

獲得實際的數值,使用此

int numbers = Character.getNumericValue(data.charAt(counter)); // fetches the numeric value 

你會得到之間的-1,因爲你是你的字符串中手動添加\n。刪除它,它不會顯示-1

// stringBuffer.append("\n"); // This is unnecessary. Comment it out. 
+0

@ CodeMonkey-檢查編輯後的答案。 – SudoRahul

0

更換int numbers = data.charAt(counter);int numbers = data.charAt(j)-'0';

,並考慮刪除數據

String data = stringBuffer.toString().trim(); 
data = data.replaceAll("\\s+", " "); 
+0

理想情況下,我想擁有它,因此它將「」變爲0。 – KeironO

相關問題