Введенное целое число в массив символов - Java - PullRequest
0 голосов
/ 12 ноября 2018

Поэтому я недавно попытался выполнить задачу HackerRank, которая включала подсчет дыр числа и их сложение, и после небольшого исследования я в итоге превратил его в массив символов и выбрал три значения для увеличения и суммирования ссумма, как показано ниже:

 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 голосов
/ 12 ноября 2018

Во-первых, вы должны добавить некоторые цитаты в ваш тест, так как цифры [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(), и если вы проверяете javadoc print(char[] s), он говорит:

Вывести массив символов.Символы преобразуются в байты в соответствии с кодировкой символов платформы по умолчанию, и эти байты записываются точно так же, как метод write (int).

Таким образом, он выполняет побайтную печатьиз.Так что это нормально, что он печатает целое число.

0 голосов
/ 12 ноября 2018

Вы сравниваете char с int с неправильными значениями int (например, '1' != 1).Было бы безопаснее сравнивать char с char:

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, где вы проверяете, является ли число 1, 2 и т. Д.

Также для печати вашего char[] используйте Arrays#toString:

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