2017-02-17 2 views
1

Je veux savoir comment je peux faire fonctionner un programme qui prend les arguments de ligne de commande sans argument de ligne de commande.ArrayIndexOutOfBoundsException lors du saut de l'argument de ligne de commande

C'est la dernière fois que j'ai besoin d'aide avec else if. Comment puis-je accomplir ce que j'essaie de faire ici?

P.S Je n'ai pas trouvé de réponse à cela en lisant les réponses sur le post c'est un "duplicata possible" de.

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

Si vous avez besoin d'autres classes, je peux vous donner ceux-ci. Cependant, ils ne sont pas nécessaires pour répondre à la question.

+1

double possible de [Quelles sont les causes java.lang.ArrayIndexOutOfBoundsException et comment puis-je l'empêcher?] (Http: // stackoverflow .com/questions/5554734/quoi-provoque-un-java-lang-arrayindexoutofboundsexception-et-comment-faire-je-le-prévenir-it) – Maverick

Répondre

0

Modifiez l'ordre de vos instructions if. En ce moment args[1].equals() est vérifiée avant de vérifier args.length == 0. Ainsi, lorsque le tableau est vide, le premier appel lèvera une exception. Si vous vérifiez la longueur en premier, cela sera résolu.

Modifier cette structure:

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

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

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

} 

à ceci:

if(args.length == 0){ 

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

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

} 
+0

Merci! J'apprécie la réponse rapide et la solution à ma question. –

+0

@JonasNorill Pas de problème, heureux de vous aider! Si cela a résolu le problème, s'il vous plaît rappelez-vous d'upvote et d'accepter =] – nhouser9

+0

Upvoted et accepté. Ma réputation est malheureusement inférieure à 15 ans, donc je ne sais pas si l'upvote vous affectera de quelque façon que ce soit. :) –