2011-09-15 1 views
0

私はコマンドライン引数を使ってこの小さなプログラムを作っています。私は90%の作業をしたようです。しかし、私は、ユーザーがaswell以外の数値を入力できるようにしようとしています。..ここで/私のプログラムで数値以外の値を許可する方法は?

ユーザ入力/出力例

入力:

$ java d1 4eb:16 10110110:2 407:8 2048:10

出力:

4eb base 16 is 1259 base 10 10110110 base 2 is 182 base 10 407 base 8 is 263 base 10 2048 base 10 is 2048 base 10

私の唯一の問題は、文字が入っていて最初の入力に問題があり、それが私に数字例外を与えるエラーですまたは。どんな助けも素晴らしいでしょう。私は正しい答えではなく正しい方向への助けを好むでしょう。ありがとうございました!

public class homework{ 
    public static void main (String[] args){ 
     int answer1=0,check1=0,check2=0,x=0, val=0,rad=0; //holds integer values user gives and check for : handler, answer etc 
     do{ //will continue to loop if no : inputted 
     for (x=0;x<args.length;x++){ 

       check1=args[x].indexOf(":");  //checks input1 for the : 
       if(check1==-1){System.out.println("No Colon Found in "+args[x]+".");check1=0;} 
       else{ 
        String numbers [] = args[x].split(":");  //splits the string at : 
        val = Integer.parseInt(numbers[0]); //parses [0] to int and assigns to val 
        rad = Integer.parseInt(numbers[1]);  //parses [1] to int and assigns to rad 
        if(val==0||rad==0){System.out.println("The argument "+args[x]+" could not be converted.");check2=0;} 
        else{ 
        for (int i = 0; val > Math.pow(rad, i); i++){ 
         int digit = (val/(int) Math.pow(10, i)) % 10; 
         int digitValue = (int) (digit * Math.pow(rad, i)); 
         answer1 += digitValue;} 
         answer1 = Integer.parseInt(numbers[0], rad); //finds the answer in base10. 
         System.out.println(val+" base "+rad+" is "+answer1+" base 10."); //gives user the results 
      }}}}while(check1==-1); }} //if user forgot : loop 

答えて

1

最初にparseIntを呼び出すときは、ベースを指定する必要があります。たとえば、あなたは16進数を解析している場合、ユーザーが指定する必要があります:あなたはたぶん、あなたはベース別をしなければならないベース10

に16進数を解析しようとするため

val = Integer.parseInt(numbers[0], 16) 

あなたはこの例外を受け取りますコマンドラインパラメータ。私はそれが最初のコマンドラインパラメータであると仮定します。次に実行することができます:

int base = Integer.parseInt(args[0]) 
val = Integer.parseInt(number[0], base) 
1

要望に応じて、ここにいくつかのヒントがあります。

例外がここに生じている:それはベース10にあったかのように

val = Integer.parseInt(numbers[0]); 

あなたはいつもそうでない場合でも、コロンの前に番号を解析しています。

また、forループの目的は私にはわかりません。正しい基数を使用して数値を解析したら、それを基数10で印刷するのは非常に簡単です。

関連する問題