需要协助统计偶数和奇数整数

时间:2015-03-08 05:43:41

标签: java

好的,我正在审核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 ");    
    }
}

7 个答案:

答案 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 ");

        }