公共静态整数

时间:2016-02-03 13:47:21

标签: java indexoutofboundsexception

我有一个代码,我需要从Size.txt文件中调用作为公共静态整数的作业数量,如下所示:

public class GetJobs {
public static int Jobs = valueN(), inp = 4;

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

public static int valueN(){
            int n;
            File file = new File("C:\\Data\\Size.txt");
            String[] eachLine ;
            int[] MN = new int [inp];
            try{
                    Scanner input = new Scanner(file);              
                    eachLine = input.nextLine().split("\\s+");      
                    for(int j=0; j<inp;j++){                    
                        MN[j]=Integer.parseInt(eachLine[j]);
                    }   
                    System.out.print("\n");
                input.close();          
                }           
                catch(Exception e){             
                e.printStackTrace();            
            }           
            n=MN[0];
            return n;
    }

在Size.txt文件中,Jobs的数量是第一个元素,问题是我在运行它时遇到错误。有什么问题?

错误是: 线程“main”java.lang.ExceptionInInitializerError中的异常 引起:java.lang.ArrayIndexOutOfBoundsException:0

1 个答案:

答案 0 :(得分:4)

这是问题所在:

public static int Jobs = valueN(), inp = 4;
...
public static int valueN(){
    ...
    int[] MN = new int [inp];
    ...
    n=MN[0];
}

当您运行valueN()时,inp仍然是0.将inp设置为4的初始化只会在 Jobs之后发生已在valueN()返回时初始化。所以你要创建一个空数组。然后,您尝试访问它的元素0。 (您实际上不会调用Integer.parseInt,因为for循环j将与inp进行比较,而inp仍然是0 ...)

实际上并不清楚你为什么要创建一个数组 - 你只是从第一行返回第一个值,所以我建议你只需返回它而不进行任何其他解析。如果确实想要创建一个数组并解析多个元素,请更改初始化的顺序,或者只需将valueN()移到方法内。 (目前还不清楚它代表什么意思......)

(我还建议您停止捕捉所有例外情况,但这是另一回事。)

请注意,在静态初始值设定项中运行复杂代码通常是一个坏主意 - 它可以帮助您解决此类问题。将main的呼叫转移到=CONCATENATE(A1;",";A2;",";A3;",";A4;",";A5;",";A6;",";A7;",";A8;",";A9;",";A10;",";A11) 内部几乎肯定会更清晰。