循环有问题?程序按预期运行,但测试不断失败.Java using TMCbeans.



我正在用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. 在数字测试行中,您检查一个数字是否大于或等于 1 (number >= 1(,但您应该检查它是否小于 0,因为它必须是负数。(在问题中:输入值的总数为负(

  2. 您正在使用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(),因为您知道输入是整数类型。

我无法得到确切的问题。但有一些观察。

  1. 如果你真的在第一次询问时输入所有数字,然后按 ENTER,显然它会抛出 NumberFormatException,因为"5 4 -3.."不是一个有效的数字,循环不会继续。尝试输入每个数字并按回车键。

  2. 扫描仪必须关闭。如果您使用的是 JDK 8,请使用"try (Scanner scanner = new Scanner(System.in(( {...}。这将自动关闭扫描仪。

最新更新