Java 比较数据后得到错误的结果

Java 比较数据后得到错误的结果,java,Java,我编写了以下代码来读取一行,将它们转换成整数,并计算一行中有多少个偶数、奇数和零位数 但问题是,每当我输入零,它都会计算count,甚至在我的代码中,而不是countZero 我的代码怎么了? 我在计算代码中的偶数和奇数时没有任何问题,它只是零 Scanner stdin = new Scanner(System.in); String str = ""; int countOdd = 0, countEven = 0, countZero = 0; str =

我编写了以下代码来读取一行,将它们转换成整数,并计算一行中有多少个偶数、奇数和零位数

但问题是,每当我输入零,它都会计算count,甚至在我的代码中,而不是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++;  }
Scanner stdin=新扫描仪(System.in);
字符串str=“”;
int countOdd=0,count偶数=0,countZero=0;
str=stdin.nextLine();
char[]breakDown=str.toCharArray();
整数转换;
对于(int i=0;i
将字符
'0'
强制转换为整数时,它将变为48,而不是0。表达式
breakDown[i]
的类型为
char
,但当您将其传递给
Integer
构造函数时,它将转换为
int

您只需摆脱对
整数的转换,并将其写入循环中即可

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

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

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

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

您只需摆脱对
整数的转换,并将其写入循环中即可

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

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

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

代码中的问题是
newinteger(细分[i])
返回ASCII码的值,而不是数字的实际值。所以它返回0x30,这是偶数,并且您的代码正确地增加了
countEven
而不是countZero


我想到的第一个解决方案是使用
Integer.valueOf(分解[i]-0x30)

代码中的问题是
新整数(细分[i])
返回ASCII码的值,而不是数字的实际值。所以它返回0x30,这是偶数,并且您的代码正确地增加了
countEven
而不是countZero


我想到的第一个解决方案是使用
Integer.valueOf(分解[i]-0x30)

是的,这是一个比我更好的解决方案,因为数字0-9的ASCII码介于0x30和0x39之间。例如,1是0x31,这很奇怪。啊,我明白了!!!谢谢,谢谢lwi^^^换句话说,它将“0”字符转换为ASCII码,而不是直接将其转换为int类型,对吗?还有一个问题:字符类型(细分[i])可以直接除以数字,只要这些字符是数字,对吗?如果你试图用
字符
进行算术运算,它将被视为数字。它不必在
'0'
'9'
的范围内。是的,这是一个比我的更好的解决方案,因为数字0-9的ASCII码介于0x30和0x39之间。例如,1是0x31,这很奇怪。啊,我明白了!!!谢谢,谢谢lwi^^^换句话说,它将“0”字符转换为ASCII码,而不是直接将其转换为int类型,对吗?还有一个问题:字符类型(细分[i])可以直接除以数字,只要这些字符是数字,对吗?如果你试图用
字符
进行算术运算,它将被视为数字。它不必在
'0'
'9'
之间。