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(" ");
}
}
}
}
如果您需要的其他类,我可以给你的。但是,他们不需要回答这个问题。
更改您的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")){
}
谢谢!我很欣赏我的问题的快速反应和解决方案。 –
@JonasNorill没问题,乐意帮忙!如果这解决了这个问题,请记住注册并接受=] – nhouser9
Upvoted并接受。不幸的是,我的声望在15岁以下,所以我不知道upvote是否会以任何方式影响你。 :) –
的可能的复制[什么原因导致java.lang.ArrayIndexOutOfBoundsException,如何预防呢?(HTTP://计算器.com/questions/5554734/what-causes-a-java-lang-arrayindexoutofboundsexception-how-do-i-prevent-it) – Maverick