看板 java 關於我們 聯絡資訊
※ 引述《PensiveMoon (淺色的那條)》之銘言: : 這個問題困擾我好久, : 我也不知道為什麼可以編譯,可是卻無法執行, : 執行之後都會告訴我 : Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 請找翻譯機翻譯整句話, 並且 想一下為什麼是 1 : //impor一些packge可以用 impor 是什麼? : public class ArrayTest{ : public void loadFile(String inputName){ : //讀一個檔案,由下面的main呼叫 這樣的注解不太好, 一般希望解釋 如果有傳入的變數的話, 它是幹麻的, 如果有傳回的變數的話, 它是幹麻的, 整個 method 在幹麻. 簡單來說, API 文件寫啥你就學著寫就是了. 位置通常也是放在 loadFile 前面 格式請自己再去查讀相關資料 : try{ : FileInputStream fs = new FileInputStream(inputName); : InputStreamReader input = new InputStreamReader(fs); : BufferedReader bu = new BufferedReader(input); : //這裡是一些讀檔的操作 這邊太常見所以我就不講你註解了 你變數命名規則有沒有一致性? fs 是 FileInputStream 抓頭尾單字的頭 ^ ^ input 是 InputStreamReader 的第一段 ^^^^^ bu 是 BufferedReader 的第一段的頭兩個字 ^^ 這樣你以後變數量假設到五百個的話, 你有辦法快速回想起哪個短名是做什麼鬼事情用的嘛? : String line; : String name[]={"0"}; : int amount[][] = new int[10][12]; : int i=0; : int j; : //宣告應該要有的陣列之類的 這邊的變數都需要詳細解釋 例如說 name 為啥要預設宣告為一個 [1] 的 array 它的作用是啥... etc 一般對 method 是不用這樣作 不過你要問的就是這個 method 所以給我好好比照一般 class API 文件的 Field Summary 寫清楚 : while((line = bu.readLine()) != null){ : String tokens[] = line.split(" "); : name[i] = tokens[0]; : for(j=0;j<12;j++) : { : amount[i][j] = Integer.parseInt(tokens[j+1]); 像這邊你要做一件事情, 你這個 for 會跑 12 次對吧 請用紙筆列出十二行 [] 裡面的數字 這邊請假設 i 不變都是 0 所以第一行是 0 0 1 以下類推, 並請解釋第十二行能否執行? 為什麼? : //出現錯誤的行數 : } : i++; 這邊要作跟前面一樣的事情, 只是 i 會變了, 這次 j 你可以假設就是 0 沒關係. 一樣用紙筆從第一行讀取以後 i 是 0 開始列 所以 第一行是 0 0 1 請解釋假設檔案寫錯讀到第 11 行的時候會發生什麼事情? 以及 i >= 1 的時候, name 這個 [0] 的 array 會發生什麼事情? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.160.34.62
PensiveMoon:哈,謝謝,基本上因為這個程式寫的有點急 11/17 17:20
PensiveMoon:的確有點變數方面定義名稱寫得很糟糕,不過後來我已經 11/17 17:21
PensiveMoon:找出錯誤了,因為傳入檔案中間間格式用tab不是" "所以 11/17 17:21
PensiveMoon:所以才會無法讀,關於讀行數的方面是我設定錯了。謝謝 11/17 17:22