输入的整数到char数组-Java

时间:2018-11-12 19:30:01

标签: java arrays char type-conversion 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;
    }
}

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

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

2 个答案:

答案 0 :(得分:3)

您正在将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,也可以删除第一个if语句,在该语句中检查数字是否为12等。

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

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

答案 1 :(得分:1)

首先,由于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,它会说:

  

打印一个字符数组。这些字符将根据平台的默认字符编码转换为字节,并以完全write(int)方法的方式写入这些字节。

因此它执行逐字节打印。因此,正常情况下,它会打印一个整数。