输入整数到char数组 - Java

T. *_*ifo 5 java arrays type-conversion char nested-loops

所以我最近尝试做HackerRank挑战,包括计算一个数字的漏洞并将它们加起来,经过一些研究,我最终将它变成一个char数组并选择三个值来递增并加起来如图所示下面:

 public static int countHoles(int num) {

    //create integers that count how many a number with no, one or two holes shows up
    Integer noHoles = 0;
    Integer oneHole = 0; 
    Integer twoHoles = 0; 
    Integer sum = 0;
    Integer length = 0;

    //turn the inputted number into a char array
    char [] digits = String.valueOf(num).toCharArray();
    System.out.println(digits);
    length = digits.length;

    //These nested loops incremement the numbers initialized above as the first for-each loop goes through each index value of the array
    for (int i = 0; i < digits.length; i++){
        if (digits[i]== 1 || digits[i]==2 || digits[i]==3 || digits[i]==5 || digits[i]==7){
            noHoles++;
        } else if (digits[i]==4 || digits[i]==6 || digits[i]==9 || digits[i]==0){
            oneHole+= 1;
        } else if (digits[i]==8){
            twoHoles+= 2;
        }

    }
    //add up the incremented integers. twoHoles is doubled as each unit counts as two holes and noHoles is 0 regardless of its values
    sum = oneHole + twoHoles;
    return sum;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是char数组总是以正常整数形式返回!我不能尝试模数方法,因为使用0(其中有一个洞),以及String.valueOf(num).toCharArray()上的一堆变体,如(""+ num).toCharArray()和Integer .toString(number).toCharArray(),但它仍然输出输入的数字而不是想要的char数组.当然,由于空数组,该方法的其余部分也会吐出0.

我是一个新手,但该死的是令人沮丧的.我觉得这是一个我没有看到或不知道的微观细节,而不是我的逻辑.有什么帮助吗?

Jac*_* G. 3

您将 a与具有不正确值的charan进行比较(例如,)。与以下比较更安全:intint'1' != 1charchar

if (digits[i] == '1' || digits[i] == '2' || digits[i] == '3' || digits[i] == '5' || digits[i] == '7') {
    noHoles++;
} else if (digits[i] == '4' || digits[i] == '6' || digits[i] == '9' || digits[i] == '0') {
    oneHole += 1;
} else if (digits[i] == '8') {
    twoHoles += 2;
}
Run Code Online (Sandbox Code Playgroud)

您也不需要该noHoles变量,因为它在递增后就不再使用。如果删除noHoles,您还可以删除第一个 if 语句,在该语句中检查数字是否为12等。

要打印您的char[],请使用Arrays#toString

System.out.println(Arrays.toString(digits));
Run Code Online (Sandbox Code Playgroud)