3

私のJavaコードでは、値が加算されて1桁になるwhileループを使用しています..たとえば、2010の場合は2 + 0 + 1 + 0 = 3、2345の場合は2 + 3 + 4です。 +5 = 14 の場合、1 + 4 = 5 のように ... しかし同時に、このプロセスは 2 つの数値には有効ではありません.. 11 & 22 来るべき値が 11 と 22 の場合、1+1 = のような追加の追加はありません。 2 または 2+2 =4; 彼らはそれを11と22の両方として表示する必要があります...私は以下のようなコードを書きましたが、機能していません....誰かがコードをチェックして助けてください...間違いは何ですか...

private long getSum10(String text)
{
    long sum10 = 0;
    char[] name10 = new char[text.length()];
    name10 = text.toCharArray();
    for (int i = 0; i < text.length(); i++)
    {
        sum10 += value10(name10[i]);
    }
    while ((sum10 != 11) && (sum10 != 22) && (sum10 > 9))
    {
        sum10 = findDigitSum10(sum10);
    }
    return sum10;
}
private long findDigitSum10(long n)
{
    int sum10 = 0;
    while (n != 0)
    {
        sum10 += n % 10;
        n = n / 10;
    }
    return sum10;
}
private int value10(char a)
{
    switch (a)
    {
    case 'A':
        return 1;
    case 'B':
        return 2;
    case 'C':
        return 3;
    case 'D':
        return 4;
    case 'E':
        return 5;
    case 'F':
        return 6;
    case 'G':
        return 7;
    case 'H':
        return 8;
    case 'I':
        return 9;
    case 'J':
        return 1;
    case 'K':
        return 2;
    case 'L':
        return 3;
    case 'M':
        return 4;
    case 'N':
        return 5;
    case 'O':
        return 6;
    case 'P':
        return 7;
    case 'Q':
        return 8;
    case 'R':
        return 9;
    case 'S':
        return 1;
    case 'T':
        return 2;
    case 'U':
        return 3;
    case 'V':
        return 4;
    case 'W':
        return 5;
    case 'X':
        return 6;
    case 'Y':
        return 7;
    case 'Z':
        return 8;
    default:
        return 0;
    }
}
4

3 に答える 3

0

私はこれを次の方法で実装したでしょう

public static void main(String[] args) {
    System.out.println(getSum(12));
    System.out.println(getSum(11));
}
public static long getSum(int no){      
    if(no/10 == 0 || no%11 == 0){
        return no;
    }else{
        return getSum(no/10) + no%10;
    }
}
于 2013-11-06T09:23:44.753 に答える
0
 while ((sum10!=11) && (sum10!=22) && (sum10>9))
{
}

成功する

if ((sum10 != 11) && (sum10 != 22) )
{
   sum10 = findDigitSum10(sum10);
}

それをif 条件に変更してください..while 条件に書き込んだ理由がわかりません..findDigitSum10(sum10) から得ようとしている答えは常に 10 未満です..

于 2013-11-06T09:23:47.037 に答える
0

number の値をチェックする条件を付けます。nが 99 より大きい場合は数字を追加し、それ以外の場合は数字をそのまま表示します。

次のようにメソッドを更新します。

private long findDigitSum10(long n) {

    // TODO Auto-generated method stub
    int sum10 = 0;
    long temp = n;

    if (temp > 99) {

        while (n != 0) {
            sum10 += n % 10;
            n = n / 10;
        }
    }

    else {
        return n;
    }

    return sum10;
}
于 2013-11-06T09:24:55.287 に答える