2017-12-03 27 views
0

16進数を表すchar配列をとる関数を書く必要があります。その数値を10進整数で返します。
は、例えば:['7', 'F']として配列中、塩基16示すよう7Fとバック12710進数への16進数の文字列

を与える私はこれをやってみましたが、何かが動作していない:

public static int HexToDec(char arr[]) { 

    int counter = arr.length - 1; 
    int sum = 0; 

    for (int i = 0; i < counter; i++) { 
     sum = (int) (sum + (Math.pow(16, counter)) * i); 
     counter--; 
    } 

    return sum; 
} 
+0

定義し、より具体的に「何かが動作していません」。エラーがある場合は、質問にそれらを含めてください。予期せぬ出力や動作がある場合は、それを記述してください。 – RealSkeptic

+0

ヒント:あなたのメソッドの 'arr'にアクセスすることは決してありません。 – RealSkeptic

答えて

1

この実装にはいくつかの問題があります。i< counterまで0から行く場合counter以来

  • arr.length - 1に初期化されますが、それは最後の値を欠場する
  • しかし、実際にはそれよりも悪いです。iがすべての反復で増分されるだけでなく、counterが減分されるあなたはまったくMath.powを必要としないO実際iにのみ配列
  • の半分に達するだろう、あなたは繰り返し、すべての最悪の16
  • に乗じて、正しい合計を蓄積することができ、arrの値は全く使用されていません機能により、あなたはおそらく、この選択肢を考えてみましょう正しい結果

を取得することはできません。

public static int hexToDec(char[] arr) { 
    int sum = 0; 
    for (char c : arr) { 
     int num; 
     if ('0' <= c && c <= '9') { 
      num = c - '0'; 
     } else if ('A' <= c && c <= 'F') { 
      num = 10 + (c - 'A'); 
     } else { 
      throw new IllegalArgumentException("Invalid character in input: " + c); 
     } 
     sum *= 16; 
     sum += num; 
    } 

    return sum; 
} 
2

たぶんこれだけはあなたを助けることができる:

public int hexToDec(char arr[]) throws NumberFormatException { 
    try { 
     return Integer.parseInt(String.valueOf(arr), 16); 
    } catch (NumberFormatException e) { 
     throw new NumberFormatException("Error or parsing"); 
    } 
} 

入力

int result = hexToDec(new char[]{'7', 'F'}); 

出力

127