1

I have a bunch of numbers.Each digit of those numbers is concatenated n times and then summed. I have to write function which is returns 1 if sum equals number else returns 0.

public static int checkConcatenatedSum(int n, int catlen) {
        char[] charArray = String.valueOf(n).toCharArray();
        int[] test = new int[charArray.length];
        String[] digit = new String[charArray.length];
        int sum = 0;
        for (int j = 0; j < charArray.length; j++){
            for(int i = 0; i < catlen; i++){
                digit[j] += charArray[j];
            }
            test[j] = Integer.parseInt(digit[j]);
            sum += test[j];
        }
        if(sum == n){
            return 1;
        }
        else return 1;
    }

digit[j] begins with null every time.

4

4 に答える 4

1

オブジェクトの新しい配列 (String[] strs = ...) を初期化すると、配列内のすべての要素が null に初期化されますが、配列を反復処理してすべての値 ("" など) を設定できます。

于 2012-06-21T13:35:19.210 に答える
1

配列 (Stringこの場合は of) を作成すると、最初はその要素nullです。

要素を初期化する必要があります。

String[] digit = new String[charArray.length];
for (int i = 0; i < digit.length) {
  digit[i] = new String();
}
于 2012-06-21T13:36:17.390 に答える
1
for (int j = 0; j < charArray.length; j++){
    digit[j] = new String();
    for(int i = 0; i < catlen; i++){
        digit[j] += charArray[j];
    }
    test[j] = Integer.parseInt(digit[j]);
    sum += test[j];
}

他の答えは正しいですが、新しいループを作成せずにそれを達成する既存のループへの簡単な追加です。

于 2012-06-21T13:40:01.837 に答える
0

もう 1 つの方法は、配列 [?] が「null」かどうかをテストして、ガベージ コレクター用の一時的なオブジェクト文字列を作成しないようにすることです。

for (int j = 0; j < charArray.length; j++){
    for(int i = 0; i < catlen; i++){
       digit[i] = digit[i] == null ? charArray[j] :  digit[i] + charArray[j];
    }
    test[j] = Integer.parseInt(digit[j]);
    sum += test[j];
}

EDIT あなたの 2 回目のリターンは間違っています (0 試行)。

于 2012-06-21T14:11:33.270 に答える