2017-02-17 3 views
1

コマンドライン引数なしでコマンドライン引数を使用するプログラムを作成する方法を知りたい。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(" "); 
       } 
      } 
    } 
} 

は、ここに私のコードです。しかし、彼らは質問に答える必要はありません。

+1

可能性のある重複した[何がjava.lang.ArrayIndexOutOfBoundsExceptionが発生し、どのように私はそれを防ぐのですか?](のhttp:// stackoverflowの.com/questions/5554734/what-c​​auses-a-java-lang-arrayindexoutofboundセクション・アンド・ハウ-I-do-i-prevent-it – Maverick

答えて

0

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

} 
+0

ありがとう!私は迅速な対応と私の質問への解決に感謝します。 –

+0

@JonasNorill問題ありません、喜んで助けてください!これで問題が解決した場合は、upv​​oteとaccept =] – nhouser9

+0

を覚えておいてください。残念なことに私の評判は15歳以下ですので、アップヴォートがあなたに何らかの影響を与えるかどうかはわかりません。 :) –

関連する問題