跳过命令行参数时出现ArrayIndexOutOfBoundsException

时间:2017-02-17 16:33:46

标签: java arrays indexoutofboundsexception args

我想知道如何在没有命令行参数的情况下创建一个使命令行参数工作的程序。

这是我需要帮助的最后一个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 个答案:

答案 0 :(得分:0)

更改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")){

}