java程序输出偶数/奇数

时间:2014-10-14 14:16:20

标签: java

我的任务是编写一个java程序,首先询问用户将输入多少个数字,然后输出输入的奇数和偶数。它仅限于0-100。我的问题是:我的代码中缺少什么?

import java.util.Scanner;

public class Clancy_Lab_06_03 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n;
        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();
            n++;
        }
        int odd = 0;
        int even = 0;
        while (n >= 0 || n <= 100) {
            n = input.nextInt();
            if (n % 2 == 0) {
                even++;
            } else {
                odd++;
            }

        }
        System.out.println(even + "even" + odd + "odd");
    }
}

5 个答案:

答案 0 :(得分:2)

第二个while循环是无限的。用这样的东西替换它:

for (int i = 0; i < n; i++) {
    int b = input.nextInt();
    if (b % 2 == 0) {
        even++;
    } else {
        odd++;
    }
}

另外我不明白你为什么要在第一个循环中递增n。例如,当您首先提供-5时,系统会要求您重新输入该号码。然后键入-1,但它会增加,实际上是程序进程0,用户输入-1。在我看来,它不是如何工作的,你应该删除这个n++

正如您在评论中提到的那样 - 使用while循环:

while(n > 0) {
    n--;
    int b = input.nextInt();
    if (b % 2 == 0) {
        even++;
    } else {
        odd++;
    }
}

最好在不再需要时关闭input(例如在主方法结束时)

input.close();

答案 1 :(得分:0)

你有两个问题 - 首先你是在第一个循环中递增n,而不是等待用户输入有效数字。

在第二个循环中,您没有将用户想要制作的条目数与他们制作的数字进行比较 - 您用新数字覆盖了前者。

这个版本应该可以使用,虽然我没有测试它,因为我没有在这台机器上安装java。

请注意,我们现在坐下来等待两个输入,并为&#34使用不同的变量名称;您将输入多少个数字&#34; (n)和&#34;您希望输入的下一个号码是什么?#34; (num)变量?连同一个新的变量i来跟踪用户输入了多少个数字。

import java.util.Scanner; 
public class Clancy_Lab_06_03
{ 
    public static void main (String[] args)
    {
        Scanner input = new Scanner (System.in);
        int n;
        System.out.println ("How many numbers will be entered?");
        n = input.nextInt();

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

        //Setup variables for the loop
        int odd = 0;
        int even = 0;
        int num;

        //Keep counting up until we hit n (where n is the number of entries the user just said they want to make)
        for(int i = 0; i < n; i++)
        {
            //Changed this, because you were over-writing n (remember, n is the number of entries the user wants to make)
            //Get a new input           
            while (num < 0 || num > 100)
            {
                System.out.println ("ERROR! Valid range 0-100. RE-Enter:");
                num = input.nextInt();      
            }

            //Check whether the user's input is even or odd
            if (num % 2 == 0)
            {
                even++;
            }
            else
            {
                odd++;
            }
        }
    System.out.println(even + " even. " + odd + " odd.");
    }
}

答案 2 :(得分:0)

我的建议是明确区分您的要求。在帖子中,您指出需要提示用户输入两个不同的数据项:

  1. 将输入多少个数字(计数
  2. 待分析的
  3. 这是一个很好的做法,特别是在学习时,为变量使用有意义的名称。您正在使用&#39; n&#39;对于变量名,然后在执行期间将其重用于不同的目的。对你来说,很明显很难弄清楚什么是&#39; n&#39;在该计划的特定部分。

        Scanner input = new Scanner (System.in);
        int count;
        System.out.println ("How many numbers will be entered?");
        count = input.nextInt();
    
        //Wait for a valid input
        while (count < 1 || count > 100)
        {
            System.out.println ("ERROR! Valid range 1-100. RE-Enter:");
            count = input.nextInt();        
        }
    

    此外,恕我直言,零计数应该无效。运行程序来评估零值是没有意义的(不要打扰什么都不做的程序)。我认为最低计数应该是一个。

        int odd = 0;
        int even = 0;
        int value;
    
        do
        {
            System.out.print("Enter a number between 0 and 100: ");
            value = input.nextInt();
            while (value < 0 || value > 100)
            {
                System.out.println ("ERROR! Valid range 0-100. RE-Enter:");
                value = input.nextInt();      
            }
    
            if (value % 2 == 0)
            {
                even++;
            }
            else
            {
                odd++;
            }
    
        count--; // decrement count to escape loop
        } while (count > 0);
        System.out.println(even + " even. " + odd + " odd.");
    

    此示例使用do / while循环,因为在这种情况下,可以至少输入一次循环。这是因为您不允许用户在程序的第一部分中输入无效的迭代次数。我直接将count变量用于循环控制(通过将其值减小到0),而不是为循环控制创建另一个变量(例如,&#39; i&#39;)。

    另一件事,略微偏离主题,是你的要求不明确。您只表示该值的范围是0到100之间的(包含)值。但是,您需要重复评估的次数并不是很清楚。大多数人认为100也是你的计数器变量的上限。由于要求不明确,检查大于或等于1的值可能是有效的,尽管非常不可能(你真的不想重复一百万次)。

    最后,您必须注意代码中的AND和OR逻辑。如图所示,你的第二个while循环:

        while (n >= 0 || n <= 100) {}
    

    是无限的。因为OR评估只需要一个部分来评估为TRUE,所以输入的任何数字都将允许循环继续。显然,意图不允许大于100的值。但是,输入150允许循环继续,因为150> = 0.同样,-90也允许循环继续,因为-90&lt; = 100.这是伪代码时在你学习的时候有所帮助。你想在lower_limit和upper_limit之间表达&#34; VALUE。&#34;如果您反转逻辑以评估超出限制的值,那么您可以说&#34;值低于lower_limit或高于upper_limit。&#34;这些伪代码表达式非常有用,可以确定您需要哪个逻辑运算符。

    我还冒昧地添加了一条消息来提示用户输入值。您的程序希望用户输入两个数字(计数和值),但只提供一个提示消息;除非他们输入超出范围的值。

答案 3 :(得分:0)

import java.util.Scanner;

public class Test2 {
    public static void main(String[] args) {

        System.out.println("Enter an Integer number:");

        Scanner input = new Scanner(System.in);
       int num = input.nextInt();


        if ( num % 2 == 0 )
            System.out.println("Entered number is even");
        else
            System.out.println("Entered number is odd");
    }
}

答案 4 :(得分:-1)

  • 从 arrayList 中提取偶数

ArrayList numberList = new ArrayList<>(Arrays.asList(1,2,3,4,5,6));

numberList.stream().filter(i -> i % 2 == 0).forEach(System.out::println);