我有一个代码,我需要从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
答案 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)
内部几乎肯定会更清晰。