好的,我正在审核Java考试,其中一个问题是: 我们希望开发一个程序来计算集合中偶数和奇数的数量(“偶数”意味着可以被2整除,“奇数”意味着不能被2整除)。我们将使用零作为集合已完全输入的指示符,并且不应将此零作为集合的一部分计算。询问用户一个整数序列,以零结尾。输出偶数整数和奇数整数。
当我运行我的代码时,由于某种原因,第一个变量总是被计为偶数,无论整数是多少。我不能为我的生活找出原因。示例:我输入23,22,25。它表示2甚至1个奇数。但是,如果我输入22,23,25,则表示1甚至2个奇数。
这是我的代码:
public class Problem4_Exam1Practice {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Enter Numbers");
int x = IO.readInt();
int even = 0;
int odd = 0;
while(x != 0) {
x = IO.readInt();
if (x % 2 == 0) {
even = even + 1 ;
}else{
odd = odd + 1 ;
}
}
System.out.println(even + " even " + odd + " odd ");
}
}
答案 0 :(得分:6)
问题是,您始终忽略第一个号码并将终止0
计为甚至,这会给人的印象是第一个号码始终计为甚至
您可以通过将while
循环重新排序为
while(x != 0) {
// check odd-even first
if (x % 2 == 0) {
even = even + 1 ;
}else{
odd = odd + 1 ;
}
// then read next int
x = IO.readInt();
}
答案 1 :(得分:2)
你正在覆盖while内的第一个输入。如果你为此使用do do,那就更好了。
System.out.println("Enter Numbers");
// x = IO.readInt(); => remove this line
int even = 0;
int odd = 0;
while ((x = IO.readInt()) != 0) {
if (x % 2 == 0) {
even = even + 1 ;
}else{
odd = odd + 1 ;
}
}
编辑:编辑代码以修复@ jschultz410指出的内容。
答案 2 :(得分:1)
从未评估输入的第一个数字:
int x = IO.readInt();
然后当进入循环时,它会在评估之前被覆盖:
while(x != 0) {
x = IO.readInt();
...
}
一种解决方案是将读数移到循环的末尾:
while(x != 0) {
...
x = IO.readInt();
}
答案 3 :(得分:1)
这里有几个问题。首先,您的第一个值正在消耗,但它没有在您的while循环中使用。此外,您计算最后一个值,即0。读取最后一个值有助于解决该问题。
public class Problem4_Exam1Practice {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Enter Numbers");
int x = IO.readInt();
int even = 0;
int odd = 0;
while (x != 0) {
if (x % 2 == 0) {
even = even + 1 ;
}else{
odd = odd + 1 ;
}
x = IO.readInt();
}
System.out.println(even + " even " + odd + " odd ");
}
}
答案 4 :(得分:1)
我认为你的问题可能源于第一个数字似乎被跳过的事实。你把它放入x然后立即覆盖它而不看它。尝试使用do-while循环,并将x = IO.readInt()
放在最后。
答案 5 :(得分:0)
感谢大家的帮助!至于扫描仪,我们使用提供给我们的IO模块,因此我们无法使用扫描仪" YET"。
答案 6 :(得分:0)
public static void main(String [] args)抛出IOException { // TODO自动生成的方法存根
System.out.println("Enter Numbers");
BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
int even = 0;
int odd = 0;
while(true) {
String s1 = bufferRead.readLine();
int x = Integer.parseInt(s1);
if(x==0)
break;
if (x % 2 == 0) {
even = even + 1 ;
}else{
odd = odd + 1 ;
}
}
System.out.println(even + " even " + odd + " odd ");
}