如何根据用户输入显示偶数和奇数? - java

时间:2015-11-22 19:17:14

标签: java while-loop

请帮助......我需要编写一个程序,根据用户输入显示偶数和奇数,但它在我上一次打印语句中永远循环。

到目前为止,这是我的错误?

import java.util.Scanner;
public class Integer {
  public static void main(String[] args) {
  Scanner input = new Scanner(System.in);
  int n = 0;
  int odd = 0;
  int even = 0;

  System.out.println("How many numbers will be entered?");
  n = input.nextInt();

  while (n < 0 || n > 100) {
    System.out.println("ERROR! Valid range 0-100. RE-Enter:");
    n = input.nextInt();
  }

  while(n >= 0) {
    System.out.println("Now enter " + n + " integers: ");
    int num = input.nextInt();

  while(num > 0) {
    for(int i = 0; i <= n; i++){
      if (i % 2 == 0) {
        even++;
      } 
      else {
        odd++;
      }
        System.out.println("You entered " + odd + " odd numbers and " + even + " even numbers.");
        }
      }
    }
  }
}

3 个答案:

答案 0 :(得分:2)

Scanner input = new Scanner(System.in);
int n = 0;
int odd = 0;
int even = 0;

System.out.println("How many numbers will be entered?");
n = input.nextInt();

while (n < 0 || n > 100) {
    System.out.println("ERROR! Valid range 0-100. RE-Enter:");
    n = input.nextInt();
}

while (n > 0) {
    System.out.println("Now enter integer " + n + ": ");
    int num = input.nextInt();

    if (num % 2 == 0) {
        even++;
    } else {
        odd++;
    }
    n--;
}
System.out.println("You entered " + odd + " odd numbers and " + even + " even numbers.");

<强>解释: 您处理来自用户的n输入,只需检查输入是奇数还是if语句。你太复杂了。

答案 1 :(得分:0)

你有太多while循环的问题。你不会在任何地方递减n,但是当它大于0时你也会循环num。所以如果它们在那里粘贴了0以外的东西,它将永远循环。

System.out.println("Now enter " + n + " integers: ");
while(n >= 0) {
    int num = input.nextInt();
    if(num > 0) {
       if (num % 2 == 0)
         even++;
       else  
         odd++;
   }
   n--;
  }

  System.out.println("You entered " + odd + " odd numbers and " + even + " even numbers.");

答案 2 :(得分:-1)

由于input.nextInt()而发生无限/永久循环,这是由于Scanner类的next()方法的行为造成的。

next(), nextInt()及其他变体不会将光标移动到下一行(当前行的结尾 - 而是使用默认分隔符作为空格读取第一个完整的标记)。另一方面,nextLine()方法读取整个输入并将光标移动到下一行。

您的代码可以通过添加input.nextLine()来修复,以便在进行下一次输入之前将光标移动到行的开头。见下面的修改代码。

public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = 0;
        int odd = 0;
        int even = 0;

        System.out.println("How many numbers will be entered?");
        n = input.nextInt();

        while (n < 0 || n > 100) {
            System.out.println("ERROR! Valid range 0-100. RE-Enter:");
            n = input.nextInt();
        }


        for(int i = 0 ; i < n; i++) {
            System.out.println("Now enter integer " + (i+1) + " of " + n + " integers: ");

            int num = input.nextInt(); 
            while(num < 0) {
                System.out.println("ERROR! Valid range 0-100. RE-Enter:");
                num = input.nextInt();
            }

            //this line is needed to move the input cursor to next line (due to use of nextInt() above)
            input.nextLine();

            if(i%2==0) {
                even++; 
            } else {
                odd++;
            }
        }

        System.out.println("You entered " + odd + " odd numbers and " + even + " even numbers.");
    }