开发者

How to print 2D Array from .txt file in Java

开发者 https://www.devze.com 2023-03-02 02:21 出处:网络
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException;
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]);      

      }

    }

Error message:

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

My txt file is:

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


double [][] data = new double [87][2]; will create a double[][] with size 87 and 2.

The index to reference these entries would be 86 and 1 (an Array always starts with index "0" and not "1")

try:

 System.out.println(" "+data[86][1]);      

That should work!


Any array object in Java have indexes as "n-1". So, the bounds of your array is 0 and 86, where data[0][0] gives you the first element, and data[86][1] gives you the last element.

Replace :

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

With:

System.out.println(" "+data[86][1]);


data[87][2] is indeed an OutOfBound Index.

If you instance your array with [87][2] your last index is data[86][1] as your indexes range from [0...86] and [0...1]


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]);
    }
}

As others have indicated you simply got your indexes wrong. Apart from that, the code above is a clearer way of doing things, maybe slightly less save... Note the use of apache commons and the build-in string api. Add your string to double conversion at a convenient place.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号