【问题标题】:Need Assistance counting even and odd integers需要帮助计算偶数和奇数
【发布时间】:2015-03-08 05:43:41
【问题描述】:

好的,我正在复习 Java 考试,其中一个问题问我们: 我们希望开发一个程序来计算集合中偶数和奇数的数量(“偶数”表示可被 2 整除,“奇数”表示不可被 2 整除)。我们将使用零作为集合已完全输入的指示符,并且该零不应计为集合的一部分。向用户询问以零结尾的整数序列。输出偶数个数和奇数个数。

当我运行我的代码时,出于某种原因,第一个变量总是被视为偶数,无论整数是什么。我无法为我的生活找出原因。示例:我输入 23、22、25。它说 2 even 1 odd。但是,如果我输入 22、23、25,它会显示 1 even 2 odd。

这是我的代码:

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 ");    
    }
}

【问题讨论】:

  • 为什么投反对票?完全有效的问题,一个很好的引导。赞成。
  • 什么是IO.readInt()
  • 不要在循环之外设置 x:for (x = IO.readInt(); x != 0; x = IO.readInt()) { ... }

标签: java


【解决方案1】:

问题是您总是忽略第一个数字并将终止的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();
}

【讨论】:

    【解决方案2】:

    您正在覆盖 while 内的第一个输入。如果你为此使用 do while 会更好。

    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 指出的内容。

    【讨论】:

      【解决方案3】:

      我认为您的问题可能源于第一个数字似乎被跳过了。您将其放入 x 中,然后立即覆盖它而不看它。尝试使用 do-while 循环,并将 x = IO.readInt() 放在末尾。

      【讨论】:

        【解决方案4】:

        输入的第一个数字永远不会被计算:

        int x = IO.readInt();
        

        然后当进入循环时,它在评估之前被覆盖:

        while(x != 0) {     
                x = IO.readInt();
                ...
        }
        

        一种解决方案是将读数移动到循环的末尾:

        while(x != 0) {
                ...     
                x = IO.readInt();
         }
        

        【讨论】:

          【解决方案5】:

          这里有几个问题。首先,您的第一个值正在被消耗,但它没有在您的 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 ");    
              }
          }
          

          【讨论】:

            【解决方案6】:

            感谢大家的帮助!至于扫描仪,我们使用提供给我们的 IO 模块,所以我们不能使用扫描仪“YET”。

            【讨论】:

              【解决方案7】:

              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 ");
              
                      }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2012-10-03
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2023-03-24
                相关资源
                最近更新 更多