我正在用Java做一个开放的大学课程,到目前为止一直很顺利。我们将在本节中介绍循环,我遇到的问题要求以下内容。
编写一个程序,从用户那里读取值,直到他们输入 0。 之后,程序打印输入值的总数 这是负面的。用于退出循环的零不应为 包含在总数中。
这是我编写的程序,我已经运行了该程序,它正常工作,但是我不断通过以下语句返回失败的测试。
当输入为:5 4 -3 1 0 "给出一个数字:"文本应总共出现 5 次。现在计数是 0 预期:<5>但计数是:<0>
这是我的代码,正如我在本地运行程序时所说,它似乎可以按要求工作。
import java.util.Scanner;
public class NumberOfNumbers {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int numbers = 0;
while (true) {
System.out.println("Give a number.");
int number = Integer.valueOf(scanner.nextLine());
if (number == 0){
break;
}
if (number >= 1){
numbers = numbers + 1;
}
}
System.out.println("number of values is " + numbers);
}
}
代码有两个问题:
-
在数字测试行中,您检查一个数字是否大于或等于 1 (
number >= 1
(,但您应该检查它是否小于 0,因为它必须是负数。(在问题中:输入值的总数为负( -
您正在使用
scanner.nextLine()
但是您没有得到一行,您会得到一个数字(如果是整数,则为Int,如果是十进制数则为双精度(将其更改为:scanner.nextInt()
:
这里的代码:
Scanner scanner = new Scanner(System.in);
int numbers = 0;
while (true) {
System.out.println("Give a number.");
int number = Integer.valueOf(scanner.nextInt());// Scanner number !!
if (number == 0){
break;
}
if (number < 0){ // Less then zero !!!
numbers = numbers + 1;
}
}
System.out.println("number of values is " + numbers);
您的问题陈述说负数的计数应该是输出。但是你返回的是正数的计数。将条件从 if(数字>= 1(更改为 if(数字 <0(。 希望这有帮助。
您需要负数的输入值总数。因此,while循环中的条件必须从number >= 1
更改为number < 0
。 检查这个
import java.util.Scanner;
public class NumberOfNumbers {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int numbers = 0;
while (true) {
System.out.println("Give a number.");
int number = Integer.valueOf(scanner.nextInt());
if (number == 0) {
break;
}
if (number < 0) {
numbers = numbers + 1;
}
}
System.out.println("number of values is " + numbers);
}
}
此外,更喜欢使用nextInt()
,因为您知道输入是整数类型。
我无法得到确切的问题。但有一些观察。
-
如果你真的在第一次询问时输入所有数字,然后按 ENTER,显然它会抛出 NumberFormatException,因为"5 4 -3.."不是一个有效的数字,循环不会继续。尝试输入每个数字并按回车键。
-
扫描仪必须关闭。如果您使用的是 JDK 8,请使用"try (Scanner scanner = new Scanner(System.in(( {...}。这将自动关闭扫描仪。