跳过命令行参数时出现 ArrayIndexOutOfBoundsException

ArrayIndexOutOfBoundsException when skipping command line argument

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

这是我需要帮助的最后一个 else if 语句。我怎样才能完成我想在这里做的事情?

P.S 我在阅读 post 上的回复时没有找到答案,这是 "possible duplicate" 的。

这是我的代码:

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(" ");
                }
            }
    }
}

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

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

}