我的任务是编写一个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");
}
}
答案 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)
我的建议是明确区分您的要求。在帖子中,您指出需要提示用户输入两个不同的数据项:
这是一个很好的做法,特别是在学习时,为变量使用有意义的名称。您正在使用&#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 numberList = new ArrayList<>(Arrays.asList(1,2,3,4,5,6));
numberList.stream().filter(i -> i % 2 == 0).forEach(System.out::println);