0

コマンド ライン引数を使用してこの小さなプログラムを作成しています。作業の 90% が完了しました。しかし、ユーザーが数値以外の値も入力できるようにしようとしています..

ユーザー入出力例

入力:

$ 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
4

2 に答える 2

1

リクエストに応じて、ここにいくつかのヒントがあります。

ここで例外が発生しています:

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

コロンの前の数値は、たとえそうでなくても、常に 10 進数であるかのように解析しています。

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

于 2011-09-15T18:59:13.500 に答える
1

最初に parseInt を呼び出すときにベースを指定する必要があります。たとえば、16 進数を解析する場合は、次のように指定する必要があります。

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

基数 10 で 16 進数を解析しようとするため、この例外が発生します。

おそらく、ベースを別のコマンドラインパラメーターにする必要があります。これが最初のコマンド ライン パラメータであると仮定します。次に、次を実行できます。

int base = Integer.parseInt(args[0])
val = Integer.parseInt(number[0], base)
于 2011-09-15T19:02:45.140 に答える