2016-10-07 13 views
0

1. long number = 564; 2. String str = number+""; 3. char[] num = str.toCharArray(); 4. number = number - num[0]; /* The value of number is 511 */予期しない値アレイ

をcharに変換した後、私は、コードのこの部分を使用して、多数の番号の最初の数字を減算しようとしています。

デバッグ中に、num [0]の値が53であることが分かりました。

+1

「53」は文字「5」のASCIIコードです –

+0

ありがとう、@ M.Mですが、数字を559にしたいのですが、53から5に変換することは可能ですか? – Akhilesh

+1

あなたは48を引くことができますか? –

答えて

1

私はこれまで、あなたの四行目を変更することができますことをお勧め:

number = number - Long.parseLong(Character.toString(num[0])); 

基本的には、どのようなここで起こっていることは、私が最初に、そしてlongに文字列を解析された文字列にcharnum[0])変換することです。

代わりに、文字列を文字配列に変換する必要はありません。文字を取得するにはcharAt()を使用します。

number = number - Long.parseLong(Character.toString(str.charAt(0))); 
0

それはちょうど、数値を文字列に変換する最初の文字を抽出し、数値に戻って変換し、減算する間違って感じています。数字を直接扱っている間に最初の数字を抽出してみませんか?このような何かをするだろう:

long number = 564; 

    int digits = 0; 
    assert (number > 0); 
    for (long num = number; num > 1; num = num/10) { 
     digits += 1; 
    } 
    int firstDigit = (int) (number/Math.pow(10, digits -1)); 

    number = number - firstDigit; 
    System.out.println(number); 

あなたはすべての数字を取得したい場合:あなたは二項演算子を使用している場合は

long number = 564; 

    int digits = 0; 
    assert (number > 0); 
    for (long num = number; num > 1; num = num/10) { 
     digits += 1; 
    } 

    for (int digit = digits - 1; digit >= 0; digit--) { 
     int currentDigit = (int) (number/Math.pow(10, digit)) % 10; 
     System.out.println(currentDigit); 
    } 
+0

これは最初の桁については完全に機能します。他の数字を見つけるためには、同様の手順が良いでしょうか?「文字列」のアプローチですか? – Akhilesh

+0

私は同様のアプローチを提案しています(数字 - 文字列ではありません)。必要な変更は簡単です。私は私の答えを更新します。 – sestus

1

を「 - 」より小さいデータ型を、この場合はcharで、に昇格されますlongは、num [0]( '5')のASCII値53を返します。num [0]の実際の面の値を取得するには、それをStringに変換し、Sweeperが指摘したようにLongに解析します。

関連する問題