【问题标题】:Inputted integer to char array - Java将整数输入到 char 数组 - Java
【发布时间】:2019-04-15 13:40:24
【问题描述】:

因此,我最近尝试进行 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。

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

【问题讨论】:

  • 您希望输出是什么? (打印Array时也使用Arrays.toString

标签: java arrays char type-conversion nested-loops


【解决方案1】:

您将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));

【讨论】:

  • 非常感谢!我知道我错过了一个小细节!我打算用 noHoles 打印出有多少没有洞的数字,结果很好。再次感谢!您是否有理由建议我使用 Arrays#toString 将其打印出来?我以前从未见过,没有它它仍然可以正常工作。
  • @T.Bifo Well Arrays#toString 是您用来打印数组的工具。 System.out.println 在这种情况下对您来说很好,因为有一个接受char[] 的重载方法。使用不同类型的数组时,您不会那么幸运!
  • 哦,我明白了,这是正确编码的提示!以后我会记住这一点的:)
【解决方案2】:

首先,您必须在测试中添加一些引号,因为 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)方法的方式写入。

所以它会逐字节打印输出。所以它打印一个整数是正常的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    相关资源
    最近更新 更多