Java 跳过命令行参数时出现ArrayIndexOutOfBoundsException
我想知道如何使一个接受命令行参数的程序在没有命令行参数的情况下工作 这是我需要帮助的最后一个Java 跳过命令行参数时出现ArrayIndexOutOfBoundsException,java,arrays,indexoutofboundsexception,args,Java,Arrays,Indexoutofboundsexception,Args,我想知道如何使一个接受命令行参数的程序在没有命令行参数的情况下工作 这是我需要帮助的最后一个else if-语句。我怎样才能完成我在这里要做的事情 另外,我在阅读帖子上的回复时没有找到答案,这是一个“可能的重复” 这是我的密码: import java.util.Scanner; import java.io.File; import java.util.ArrayList; class LesInformasjon{ public static void main(String[]a
else if
-语句。我怎样才能完成我在这里要做的事情
另外,我在阅读帖子上的回复时没有找到答案,这是一个“可能的重复”
这是我的密码:
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(" ");
}
}
}
}
import java.util.Scanner;
导入java.io.File;
导入java.util.ArrayList;
LessInformasJon类{
公共静态void main(字符串[]args)引发异常{
Scanner fil=新扫描仪(新文件(“informasjon.txt”);
ArrayList biler=新的ArrayList();
while(fil.hasNextLine()){
字符串行=fil.nextLine();
字符串ord[]=line.split(“”);
字符串类型=ord[0];
字符串kjennemerke=ord[1];
Bil Bil=null;
//测试仪typen bil,lager bil og setter一号ArrayList酒店
if(bilType.equals(“EL”)){
double batteriKapasitet=double.parseDouble(ord[2]);
bil=新厄尔比尔(kjennemerke、bilType、batteriKapasitet);
}else if(bilType.equals(“LASTEBIL”)){
double-utslip=double.parseDouble(ord[2]);
double-nytevekt=double.parseDouble(ord[3]);
bil=新的Lastebil(kjennemerke、bilType、Uttslip、Nytevekt);
}else if(bilType.equals(“PERSONBIL”)){
double-utslip=double.parseDouble(ord[2]);
int antgodkjentester=Integer.parseInt(ord[3]);
bil=新员工bil(kjennemerke、bilType、Uttlips、AntgodKjentester);
}
比尔加上(比尔);
}
如果(args[0]。等于(“EL”)){
用于(比尔比尔:比尔){
if(Elbil的bil实例){
//if(bil.bilType.等于(“EL”)){
系统输出打印号(bil);
System.out.println(“”);
}
}
//System.out.println(“打印埃尔比勒”);
}else if(args[0].equals(“化石”)){
用于(比尔比尔:比尔){
if(bil Fossilbil实例){
//if(bil.bilType.equals(“LASTEBIL”)| | bil.bilType.equals(“PERSONBIL”)){
系统输出打印号(bil);
System.out.println(“”);
}
}
}else if(args.length==0){//else if(args[0]==null
用于(比尔比尔:比尔){
系统输出打印号(bil);
System.out.println(“”);
}
}
}
}
如果你需要其他类,我可以给你。但是,回答这个问题不需要它们。更改
If
语句的顺序。现在args[1]。等于()
在您检查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")){
}
更改
if
语句的顺序。现在args[1]。在检查args.length==0
之前,会先检查equals()
。因此,当数组为空时,第一个调用将引发异常。如果先检查长度,则会解决此问题
更改此结构:
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没问题,很乐意帮助!如果这解决了问题,请记住向上投票并接受=]向上投票并接受=]但我的声誉不幸低于15,因此我不知道向上投票是否会在任何方面影响您日期:)@JonasNorill谢谢=]谢谢你!我感谢你对我的问题的快速回答和解决办法。@JonasNorill没问题,很乐意帮助!如果这解决了问题,请记得投票并接受=]投票并接受=]但我的声誉不幸低于15,所以我不知道投票是否会对你产生任何影响。@JonasNorill Thanks=]