【问题标题】:Count even and odd intergers until 0 is encountered计数偶数和奇数,直到遇到 0
【发布时间】:2022-02-14 09:02:40
【问题描述】:

这是我必须做的:

"编写一段代码,从键盘读取一个整数序列,直到用户输入一个负数。然后它应该输出偶数个数和读取的奇数个数的计数(不包括最后任何计数中的负值)。记住 - 0 是偶数。例如,如果序列是:

2 7 15 5 88 1243 104 -1 那么输出应该是 偶数个数:3 奇数个数:4

即使在输入 -1 之后,我的代码也会继续运行。我有一种感觉我错过了{somewhere 或写错了代码。这是我的代码:

int oddCount = 0, evenCount = 0;
Scanner in = new Scanner(System.in);
while (oddCount>=0&&evenCount>=0){
        System.out.print("Enter an integer: ");
        int temp = in.nextInt();
        if (temp>0) {
            if (temp%2==0)
                evenCount = evenCount + 1;
            else oddCount = oddCount + 1;
            while (temp>0);
        System.out.println("Number of even integers: "+evenCount);
        System.out.println("Number of odd integers: " +oddCount);
        }
    } 

【问题讨论】:

  • 标题的终止条件,与您的问题不匹配。
  • 提示:你在哪里检查 -1(或0,或其他),当你看到它时你正在做什么退出循环?
  • oddCount>=0&&evenCount>=0 始终为真

标签: java loops


【解决方案1】:

我认为使用 do While 循环也可以防止你的问题,

int oddCount = 0;
int evenCount = 0;
Scanner in = new Scanner(System.in);
do {
    System.out.print("Enter an integer: ");
    int temp = in.nextInt();
    if (temp > 0) {
        (temp % 2==0)? evenCount++:oddCount++;
    }
 } while (temp > 0);

【讨论】:

    【解决方案2】:

    您的循环将始终继续,因为while (oddCount>=0&&evenCount>=0) 在您的情况下始终为真。试试这样:

    int oddCount = 0, evenCount = 0;
    Scanner in = new Scanner(System.in);
    boolean continue = true;
    while (continue){
            System.out.print("Enter an integer: ");
            int temp = in.nextInt();
            if (temp>0) {
                if (temp%2==0)
                    evenCount++;
                else 
                    oddCount++;
            }
            else {
                System.out.println("Number of even integers: "+evenCount);
                System.out.println("Number of odd integers: " +oddCount);
                continue = false;
            }
        }
    

    【讨论】:

      【解决方案3】:

      您的代码只读取了一个整数,然后停留在这一行:while (temp>0);

      下面的代码解决了你的问题:

      int oddCount = 0, evenCount = 0, temp;
      Scanner in = new Scanner(System.in);
      System.out.print("Enter an integer: ");
      while (true) {
          temp = in.nextInt();
          if (temp < 0) {
              break;
          } else if (temp % 2 == 0) {
              evenCount = evenCount + 1;
          } else {
              oddCount = oddCount + 1;
          }
      }
      System.out.println("Number of even integers: " + evenCount);
      System.out.println("Number of odd integers: " + oddCount);
      

      【讨论】:

        【解决方案4】:

        这里有一些问题。

        首先,由于您永远不会减少 oddCountevenCount,因此条件 oddCount&gt;=0&amp;&amp;evenCount&gt;=0 将始终为 true

        其次,你有一个无限循环的空循环,因为它的条件是 true 并且它没有正文:while (temp&gt;0);

        我只是取出第一个循环,这是多余的,并使用 do while 循环:

        int oddCount = 0;
        int evenCount = 0;
        Scanner in = new Scanner(System.in);
        do {
            System.out.print("Enter an integer: ");
            int temp = in.nextInt();
            if (temp > 0) {
                if (temp % 2==0) {
                    evenCount++;
                } else {
                    oddCount++;
                }
             }
         } while (temp > 0);
        
         System.out.println("Number of even integers: " + evenCount);
         System.out.println("Number of odd integers: "  + oddCount);
        

        【讨论】:

        • 它说它缺少一段时间(表达式)来完成 do
        • @user3290019 我错过了一个'}' - 已修复。对不起。
        【解决方案5】:

        试试这个..

        Scanner s=new Scanner(System.in);
        int evenCount=0, oddCount=0;
        while(true)
        {
        System.out.println("Enter a number");
        int n=s.nextInt();
           if(n<0) break;
           if(n%2==0) evenCount+=n;
           else oddCount+=n;
        }
        System.out.println("even count "+evenCount);
        System.out.println("odd count "+oddCount);
        

        【讨论】:

          猜你喜欢
          • 2021-11-21
          • 1970-01-01
          • 2020-06-21
          • 2015-07-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多