输入整数到字符数组 - Java

Inputted integer to char array - Java

所以我最近尝试做 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;
    }
}

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

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

您将 charint 进行比较,但 int 值不正确(例如,'1' != 1)。将 charchar:

进行比较会更安全
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;
}

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

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

System.out.println(Arrays.toString(digits));

首先,您必须在测试中添加一些引号,因为 digits[i] 是一个字符,您不能通过这种方式比较它们。 digits[i]== '1' 有效。 例如:

    char five = '5';
    if (five == 5) {
        System.out.println("They are similar");
    } else {
        System.out.println("They are not similar");
    }

打印不相似。

其次,System.out.println(digits) 导致调用 print(char[] s),然后调用 println(),如果您检查 print(char[] s) 的 javadoc,它会显示:

Print an array of characters. The characters are converted into bytes according to the platform's default character encoding, and these bytes are written in exactly the manner of the write(int) method.

因此它执行逐字节打印。所以它打印一个整数是正常的。