0

我正在尝试使用 java 获取文件的第一行,但我不确定它为什么不工作或为什么我得到我得到的错误。这是我第一次在java中尝试这个。

错误

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 16
    at getSum.main(getSum.java:33)

代码

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.File;
import java.io.FileNotFoundException;
public class getSum {

    public static void main(String[] args) {
            File file = new File("path/InputArray.txt");
            FileInputStream fis = null;
            BufferedInputStream bis = null;
            DataInputStream dis = null;
            String line = null;
            try{
                fis = new FileInputStream(file);
                bis = new BufferedInputStream(fis);
                dis = new DataInputStream(bis);

                while(dis.available() != 0){
                    line = dis.readLine();
                }
            }catch (FileNotFoundException e){
                e.printStackTrace();
            }catch (IOException e){
                e.printStackTrace();
            }
            String[] splitLine = line.split("\\s+");
            int[] numbers = new int[splitLine.length];

            for(int i = 0; i< line.length(); i++){
                try{
                    numbers[i] = Integer.parseInt(splitLine[i]);
                }catch(NumberFormatException nfe){};
            }


           int amount = 0;
           System.out.print(numbers.length);
           /*amount = sumArray(0,numbers.length,numbers.length,numbers);
           System.out.print("Total: " + amount);*/
    }
4

2 回答 2

5

看这个:

int[] numbers = new int[splitLine.length];
for(int i = 0; i< line.length(); i++){
    try{
        numbers[i] = Integer.parseInt(splitLine[i]);
    }catch(NumberFormatException nfe){};
}

您正在使用ifrom 0 to line.length()... 这与splitLine.length. 我怀疑你的意思是:

for (int i = 0; i< splitLine.length; i++) {

那时,由于两者numberssplitLine具有相同的长度,您肯定不会得到ArrayIndexOutOfBoundsException.

于 2013-02-19T22:03:19.040 回答
0

我认为你的 for 循环条件是错误的。我认为你应该检查 splitLine.length()。

for(int i = 0; i< splitLine.length(); i++){
     try{
          numbers[i] = Integer.parseInt(splitLine[i]);
     }catch(NumberFormatException nfe){};
}
于 2013-02-19T22:04:38.433 回答