比较数据后得出错误的结果

时间:2013-12-24 23:41:40

标签: java

我编写以下代码来读取一行,将它们转换为整数并计算一行中偶数,奇数和零数字的数量。

但问题是,每当我输入零时,它将在我的代码中对countEven进行计算,而不是countZero。

我的代码有什么问题?
我的代码中的数字和数字都没有任何问题,它只是零。

    Scanner stdin = new Scanner(System.in);
    String str = "";
    int countOdd = 0, countEven = 0, countZero = 0;

    str = stdin.nextLine();
    char[] breakDown = str.toCharArray();

    Integer convertInt;


    for (int i = 0; i < breakDown.length; i++)  {
        convertInt = new Integer(breakDown[i]);

        if (convertInt % 2 == 1)
            countOdd++;  

        if (convertInt % 2 == 0 && convertInt != 0)
            countEven++;

        if (convertInt == 0)
            countZero++;  }

2 个答案:

答案 0 :(得分:3)

当您将字符'0'强制转换为整数时,它变为48,而不是0.表达式breakDown[i]的类型为char,但它会被强制转换为int当你将它传递给Integer构造函数时。

你可以摆脱转换为Integer并将其写入你的循环中。

    if (breakDown[i] % 2 == 1) {
        countOdd++;  
    }

    if (breakDown[i] % 2 == 0 && breakDown[i] != '0') {
        countEven++;
    }

    if (breakDown[i] == '0') {
        countZero++;
    }

答案 1 :(得分:1)

您的代码中存在的问题是new Integer(breakDown[i])返回ASCII代码的值,而不是数字的实际值。所以它返回0x30,这是偶数,你的代码正确地增加countEven而不是countZero。

在我看来,第一个解决方案是使用Integer.valueOf(breakDown[i]-0x30)代替。