2017-04-23 21 views
0
public class converter { 

    public static void main(String [] args) { 
    Options opt = new Options(); 

    opt.addOption("I", "in", false, "Eingabeformat (2,8,10,16)"); 
    opt.addOption("O", "out", false, "Ausgabeformat (2,8,10,16)"); 
    opt.addOption("V", "value", true, "Zu konvertierende Zahl"); 

    CommandLineParser parser = new DefaultParser(); 
    String value = "0"; 
    String in = "0"; 
    String out = "0"; 
    int inInt = 0; 
    int outInt = 0; 

    try { 
     CommandLine cl = parser.parse(opt, args); 

     if (cl.hasOption("I")) { 
      in = cl.getOptionValue("I"); 
      System.out.println(in); 
     } else if (cl.hasOption("in")) { 
      in = cl.getOptionValue("in"); 
      inInt = Integer.parseInt(in); 
     } 

     if (cl.hasOption("O")) { 
      out = cl.getOptionValue("O"); 
      outInt = Integer.parseInt(out); 
     } else if (cl.hasOption("out")) { 
      out = cl.getOptionValue("out"); 
      outInt = Integer.parseInt(out); 
     } 

     if (cl.hasOption("V")) { 
      value = cl.getOptionValue("V"); 
     } else if (cl.hasOption("value")) { 
      value = cl.getOptionValue("value"); 
     } 

    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
} 

こんにちは、私のクラスではCLIで作業することを学ぶ必要があり、今は大丈夫です。私の問題は:変数 'in'は、cl.getOptionValue( "I")を使って、常にnullを返します。助けてもらえますか?CLI:getOptionValueは常に 'null'を返します

答えて

2

私はそうあなたがそれらを解析しようとしないだろう、あなたはオプション値を持っている引数I、OVを期待すると仮定します。しかし、Vオプションの場合にのみ、addOptionの呼び出しの3番目の引数をtrueに設定することで指定します。あなたはオプションの値を指定したい場合は、trueにそれらすべてを設定する必要があります。

opt.addOption("I", "in", true, "Eingabeformat (2,8,10,16)"); 
    opt.addOption("O", "out", true, "Ausgabeformat (2,8,10,16)"); 
    opt.addOption("V", "value", true, "Zu konvertierende Zahl"); 

をところであなたはそれがJava慣例だ、大文字の「C」を使用して、クラスConverterに名前を付ける必要があります。

+0

タスク引数 "値" 及び "V" が必須であるべきであり、引数は、私は、O、IN、OUTオプションであることでした。私が最初にやったのは、それらを間違えるようにすることだったので、ユーザーが望んでいなければ、入力する必要はありません。しかし、私は実際に私のクラスを修正したので、タスクを完了する必要があります - 私の仲間をtheardで見てください。 – Razmo

+0

Btwあなたの助けをありがとう、お詫び申し上げます! – Razmo

+0

私の答えがあなたの問題を解決したら、それを受け入れるのはいいでしょう。 –

0
public class converter { 

public static void main(String [] args) { 
    Options opt = new Options(); 

    opt.addOption("I", "in", true, "Eingabeformat (2,8,10,16)"); // Bei false gibts spaeter null 
    opt.addOption("O", "out", true, "Ausgabeformat (2,8,10,16)"); // Bei false gibt spaeter null 
    opt.addOption("V", "value", true, "Zu konvertierende Zahl"); 

    CommandLineParser parser = new DefaultParser(); 
    String value = "0"; 
    String in, out; 
    int inInt = 10; 
    int outInt = 10; 

    try { 
     CommandLine cl = parser.parse(opt, args); 

     if (cl.hasOption("I")) { 
      in = cl.getOptionValue("I"); 
      inInt = Integer.parseInt(in); 
     } else if (cl.hasOption("in")) { 
      in = cl.getOptionValue("in"); 
      inInt = Integer.parseInt(in); 
     } 

     if (cl.hasOption("O")) { 
      out = cl.getOptionValue("O"); 
      outInt = Integer.parseInt(out); 
     } else if (cl.hasOption("out")) { 
      out = cl.getOptionValue("out"); 
      outInt = Integer.parseInt(out); 
     } 

     if (cl.hasOption("V")) { 
      value = cl.getOptionValue("V"); 
      System.out.println(convert(value, inInt, outInt)); 
     } else if (cl.hasOption("value")) { 
      value = cl.getOptionValue("value"); 
      System.out.println(convert(value, inInt, outInt)); 
     } else { 
      System.out.println("Keinen Wert eingegeben. Erneut Versuchen!"); 
     } 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

} 

public static String convert(String input, int srcRadix, int dstRadix) { 
    int value = Integer.parseInt(input, srcRadix); 
    return Integer.toString(value, dstRadix); 
} 

}

関連する問題