ArrayIndexOutOfBoundsException在跳过命令行参数时

ArrayIndexOutOfBoundsException在跳过命令行参数时

问题描述:

我想知道如何让一个程序不需要命令行参数即可使用命令行参数。ArrayIndexOutOfBoundsException在跳过命令行参数时

这是最后的else if-我需要帮助的陈述。我怎样才能完成我在这里要做的事情?

P.S在阅读帖子上的回复时,我没有找到答案,这是“可能的重复”。

这里是我的代码:

import java.util.Scanner; 
import java.io.File; 
import java.util.ArrayList; 

class LesInformasjon{ 
    public static void main(String[]args) throws Exception{ 
     Scanner fil = new Scanner(new File("informasjon.txt")); 
     ArrayList<Bil> biler = new ArrayList<>(); 


     while(fil.hasNextLine()){ 
      String line = fil.nextLine(); 
      String ord[] = line.split(" "); 
      String bilType = ord[0]; 
      String kjennemerke = ord[1]; 
      Bil bil = null; 

      //Tester typen bil, lager bil og setter inn i ArrayList 
      if(bilType.equals("EL")){ 
       double batteriKapasitet = Double.parseDouble(ord[2]); 
       bil = new Elbil(kjennemerke, bilType, batteriKapasitet); 
      }else if(bilType.equals("LASTEBIL")){ 
       double utslipp = Double.parseDouble(ord[2]); 
       double nyttevekt = Double.parseDouble(ord[3]); 
       bil = new Lastebil(kjennemerke,bilType, utslipp, nyttevekt); 
      }else if(bilType.equals("PERSONBIL")){ 
       double utslipp = Double.parseDouble(ord[2]); 
       int antGodkjenteSeter = Integer.parseInt(ord[3]); 
       bil = new Personbil(kjennemerke, bilType, utslipp, antGodkjenteSeter); 
      } 

      biler.add(bil); 
      } 



      if(args[0].equals("EL")){ 
       for(Bil bil : biler){ 
        if(bil instanceof Elbil){ 
        //if(bil.bilType.equals("EL")){ 
         System.out.println(bil); 
         System.out.println(" "); 
        } 
       } 

       //System.out.println("Print Elbiler"); 
      }else if(args[0].equals("FOSSIL")){ 
       for(Bil bil : biler){ 
        if(bil instanceof Fossilbil){ 
        //if(bil.bilType.equals("LASTEBIL") || bil.bilType.equals("PERSONBIL")){ 
         System.out.println(bil); 
         System.out.println(" "); 
        } 
       } 
      }else if(args.length == 0){ //tried else if(args[0] == null as well 
       for(Bil bil : biler){ 
        System.out.println(bil); 
        System.out.println(" "); 
       } 
      } 
    } 
} 

如果您需要的其他类,我可以给你的。但是,他们不需要回答这个问题。

+1

的可能的复制[什么原因导致java.lang.ArrayIndexOutOfBoundsException,如何预防呢?(HTTP://计算器.com/questions/5554734/what-c​​auses-a-java-lang-arrayindexoutofboundsexception-how-do-i-prevent-it) – Maverick

更改您的if报表的顺序。现在args[1].equals()正在检查之前检查args.length == 0。所以当数组为空时,第一次调用会抛出异常。如果你先检查长度,这将被解决。

改变这种结构:

if(args[0].equals("EL")){ 

}else if(args[0].equals("FOSSIL")){ 

}else if(args.length == 0){ 

} 

要这样:

if(args.length == 0){ 

}else if(args[0].equals("FOSSIL")){ 

}else if(args[0].equals("EL")){ 

} 
+0

谢谢!我很欣赏我的问题的快速反应和解决方案。 –

+0

@JonasNorill没问题,乐意帮忙!如果这解决了这个问题,请记住注册并接受=] – nhouser9

+0

Upvoted并接受。不幸的是,我的声望在15岁以下,所以我不知道upvote是否会以任何方式影响你。 :) –