2017-02-17 7 views
1

Ich möchte wissen, wie ich ein Programm erstellen kann, das Befehlszeilenargumente ohne ein Befehlszeilenargument funktioniert.ArrayIndexOutOfBoundsException beim Überspringen von Befehlszeilenargument

Es ist die letzte else if -statement, die ich brauche mit Hilfe. Wie kann ich erreichen, was ich hier versuche?

P.S Ich habe keine Antwort darauf gefunden, wenn ich die Antworten auf den Beitrag lese, dies ist ein "mögliches Duplikat" von.

Hier ist mein Code:

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

Wenn Sie die anderen Klassen brauchen, kann ich Ihnen diejenigen geben. Sie werden jedoch nicht benötigt, um die Frage zu beantworten.

+1

Mögliche Duplikat [Was ein java.lang.ArrayIndexOutOfBoundsException verursacht und wie kann ich das verhindern?] (Http: // Stackoverflow .com/questions/5554734/what-causes-a-java-lang-array-indexoutofboundexception-and-how-do-i-prevent-it) – Maverick

Antwort

0

Ändern Sie die Reihenfolge Ihrer if Anweisungen. Jetzt wird args[1].equals() geprüft, bevor Sie args.length == 0 überprüfen. Wenn das Array leer ist, löst der erste Aufruf eine Ausnahme aus. Wenn Sie zuerst die Länge überprüfen, wird dies gelöst.

Ändern Sie diese Struktur:

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

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

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

} 

Um dies:

if(args.length == 0){ 

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

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

} 
+0

Vielen Dank! Ich schätze die schnelle Antwort und Lösung meiner Frage. –

+0

@JonasNorill Kein Problem, gerne helfen! Wenn dies das Problem gelöst hat, denken Sie bitte daran, upvote und accept =] – nhouser9

+0

Upvoted und akzeptiert. Mein Ruf ist leider unter 15, daher weiß ich nicht, ob der Upvote Sie in irgendeiner Weise beeinflussen wird. :) –

Verwandte Themen