2011-04-29 107 views
0
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.StringTokenizer; 


public class csvimport5 { 


    public static void main(String[] args) throws IOException { 


     double [][] data = new double [87][2]; 
     File file = new File("buydata.txt"); 
     int row = 0; 
     int col = 0; 
     BufferedReader bufRdr = new BufferedReader(new FileReader(file)); 
     String line = null; 


     //read each line of text file 
     while((line = bufRdr.readLine()) != null && row < data.length) 
     { 
     StringTokenizer st = new StringTokenizer(line,","); 
     while (st.hasMoreTokens()) 
     { 
      //get next token and store it in the array 
      data[row][col] = Double.parseDouble(st.nextToken()); 
      col++; 
     } 
     col = 0; 
     row++; 
     } 

     System.out.println(" "+data[87][2]);  

     } 

    } 

錯誤消息:如何從文本文件打印二維數組中的Java

ArrayIndexOutOfBounds Exception at "System.out.println(" "+data[87][2]); 

我的txt文件是:

8.00,28.00 
18.00,28.00 
8.00,23.00 
12.00,20.00 
15.00,30.00 
12.00,32.00 
12.00,20.00 
18.00,31.00 
29.00,25.00 
6.00,28.00 
7.00,28.00 
6.00,24.00 
14.00,30.00 
11.00,23.00 
12.00,20.00 
31.00,24.00 
11.00,20.00 
17.00,23.00 
14.00,32.00 
15.00,23.00 
8.00,20.00 
17.00,31.00 
7.00,20.00 
12.00,23.00 
15.00,20.00 
12.00,20.00 
21.00,20.00 
27.00,27.00 
18.00,20.00 
25.00,27.00 
46.00,13.00 
26.00,10.00 
47.00,22.00 
44.00,14.00 
34.00,4.00 
34.00,4.00 
44.00,7.00 
39.00,5.00 
20.00,0.00 
43.00,11.00 
43.00,25.00 
34.00,2.00 
25.00,10.00 
50.00,9.00 
25.00,9.00 
39.00,2.00 
34.00,7.00 
44.00,15.00 
36.00,3.00 
40.00,5.00 
49.00,21.00 
42.00,7.00 
35.00,1.00 
30.00,2.00 
31.00,13.00 
53.00,12.00 
40.00,4.00 
26.00,4.00 
50.00,55.00 
57.00,51.00 
62.00,52.00 
56.00,52.00 
59.00,40.00 
61.00,68.00 
66.00,49.00 
57.00,49.00 
62.00,58.00 
47.00,58.00 
53.00,40.00 
60.00,54.00 
55.00,48.00 
56.00,65.00 
67.00,56.00 
55.00,43.00 
52.00,49.00 
67.00,62.00 
68.00,61.00 
65.00,58.00 
46.00,53.00 
46.00,49.00 
47.00,40.00 
64.00,22.00 
64.00,54.00 
63.00,64.00 
63.00,56.00 
64.00,44.00 
63.00,40.00 

回答

0

data[87][2]確實是一個OutOfBound指數。

如果實例與[87][2]你最後一個索引你的陣列是data[86][1]爲您的索引範圍從[0...86][0...1]

0

double [][] data = new double [87][2];將創建一個double [] [],大小87和2

的指數引用這些條目會是86和1(一個陣列總是與索引號 「0」 而不是 「1」 開頭)

嘗試:

這應該工作!

0

Java中的任何數組對象的索引都是「n-1」。因此,數組的邊界是0和86,其中data [0] [0]爲您提供第一個元素,data [86] [1]爲您提供最後一個元素。

替換:

System.out.println(" "+data[87][2]); 

有了:

System.out.println(" "+data[86][1]); 
0
import java.io.File; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 
import org.apache.commons.io.FileUtils; 

public class CSVReader { 

    public static void main(String[] args) throws IOException { 
     List<String[]> dataList = new ArrayList(); 
     File file = new File("/tmp/data.txt"); 
     List<String> lines = FileUtils.readLines(file, "UTF-8"); 
     for (String line : lines) { 
      dataList.add(line.split(",")); 
     } 
     String[] val = dataList.get(dataList.size() - 1); 
     System.out.println("" + val[0] + " " + val[1]); 
    } 
} 

正如其他人指出,你只是有你的索引錯誤。除此之外,上面的代碼是一種更清晰的做事方式,可能稍微節省一點...注意使用apache commons和內置字符串api。在方便的地方添加字符串進行雙重轉換。