我的建議(除了使用double[][]
喜歡的東西List<List<Double>>
改變)將要經過的每個文本行這樣:
InputStream fis;
BufferedReader br;
String line;
fis = new FileInputStream("the_file_name");
br = new BufferedReader(new InputStreamReader(fis, Charset.forName("UTF-8")));
while ((line = br.readLine()) != null) {
// Deal with the line
}
// Done with the file
br.close();
br = null;
fis = null;
有了這個,你應該能夠得到的每一個人「行」文件。我之前提到的使用List<List<Double>>
而不是double[][]
的原因是因爲你得到了兩件事:
1)動態調整大小。即使你知道這個尺寸,並且想給這個列表一個默認的大小來幫助提高性能,你也不會受限於這個尺寸,這是值得的。程序員黃金。
2)使用原始double(小寫d)而不是Java對象Double(大寫D)真的會殺死你,只要不能訪問Double(capitol D對象)中內建的很多方法和可用性, 。關於這方面的更多解釋,請參閱:Double vs. double
另請注意,上面的代碼沒有錯誤檢查,因此您需要在其中構建一些代碼,這是一個非常基本的實現。
編輯::
好了,所以在你的代碼,你張貼在:code snipped你有readLine()
循環的雙for循環的內部。像這樣:
while ((line = br.readLine()) != null) {
for (int i = 0; i < rows; i++){
for(int j = 0; j< columns; j++){
line = array[i][j];
}
}
}
現在,有兩個問題:
1)要設置LINE等於陣列的內容[i] [j],這意味着任何操作,因爲陣列僅僅是一個空的二維數組。
2)在你的循環1302次的文本文件(然後多一些,因爲你正在做的(1302 *列)*每行1302
難道就是上面這段代碼,是需要照顧。你的「行」循環的所以不是你在做什麼,只是做:
int i = 0;
while ((line = br.readLine()) != null) {
array[i][0] = line;
i++
}
,將填補了所有該文件中的字符串您的數組。
我已經實現了一些基本的錯誤檢查。我做的是我把我的多維數組遍歷到你的while循環中,賦值爲'line = array [i] [j]'。這會起作用嗎? – theGreenCabbage
那麼用br.readLine()得到的每一行都是一個字符串,所以你會遇到一些類型不匹配的情況,你需要做的就是在你使用'split (「\\ s +」)',然後使用Double.parseDouble()來標記每行,然後可以將這些單獨的標記放入雙精度數組中。 – WillBD
我已經將我的數組類型更改爲一個'String'來對付那個= P。我不知道爲什麼我最初做出的決定是雙倍的,因爲這些價值在起步時並不是雙倍的。 – theGreenCabbage