作者ogamenewbie (._.)
看板java
標題Re: [問題] ArrayIndexOutOfBoundsException: 1
時間Tue Nov 17 15:45:31 2009
※ 引述《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