我编写以下代码来读取一行,将它们转换为整数并计算一行中偶数,奇数和零数字的数量。
但问题是,每当我输入零时,它将在我的代码中对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++; }
答案 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)
代替。