#java
#java
Вопрос:
Я изучаю Java и не могу понять, почему я продолжаю получать эту ошибку. Когда я запускаю program и набираю 0, выводится NaN.
Упражнение: напишите программу, которая запрашивает у пользователя ввод, пока пользователь не введет 0. После этого программа выводит среднее значение положительных чисел (чисел, которые больше нуля). Если положительное число не введено, программа выводит сообщение «Не удается вычислить среднее значение».
Что я написал :
import java.util.Scanner;
public class AverageOfPositiveNumbers {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double input = 0;
double sum = 0;
while (true) {
double userInput = Double.valueOf(scanner.nextLine());
if (userInput > 0) {
input = input 1;
sum = sum userInput;
}
if (userInput == 0) {
break;
}
if (userInput < 0) {
System.out.println("Cannot calculate the average");
}
}
System.out.println(sum / input);
}
}
ошибка:
When input was:
0
, the expected out put was:
nnot
Output was not found.
Комментарии:
1. Какой бы инструмент, через который он запускается для оценки / проверки, выдает вывод, который вы видите. Он ожидает, что «Не удается вычислить среднее значение», но по какой-то причине он печатает только «nnot» в «Не может».
2. это курс mooc java.
3. Пожалуйста, используйте реальную среду разработки (например, Eclipse, IntelliJ, Visual Studio Code и т. Д.) Вместо браузера для выполнения этих задач, Чтобы избежать подобных неясных ошибок.
4. Вы делите на ноль. Это происходит, когда вводится 0.
Ответ №1:
Вы получаете ошибку NaN (не число), потому что ваши переменные double input = 0;
и double sum = 0;
имеют значение 0.
Если вы вводите 0 в качестве первого числа, ваша программа делит 0 на 0, что невозможно.
Вот мое решение этой проблемы:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double input = 0;
double sum = 0;
while (true) {
double userInput = Double.parseDouble(scanner.nextLine());
if (userInput == 0) {
if (sum == 0) {
System.out.println("You cannot enter 0 as the first number");
} else {
break;
}
}
if (userInput > 0) {
input ;
sum = sum userInput;
}
if (userInput < 0) {
System.out.println("Cannot calculate the average");
}
}
System.out.println(sum / input);
}
}
Комментарии:
1. хорошо, но я ставлю точку, если введено 0, и он говорит, что вывод не найден, а ожидаемый результат nnot. Если я меняю переменные на что-либо другое, вся программа не работает.
2. Код, который я только что опубликовал выше, работает отлично. Я попробовал это сам. Пожалуйста, сравните код и найдите опечатки или другие ошибки.
Ответ №2:
Как упоминалось другими, вы пытаетесь разделить на ноль. Это вызовет исключение, которое вы не поймаете. Вы должны убедиться, что вы не делите на ноль.
Кроме того, поскольку у вас есть это внутри цикла:
if (userInput < 0) {
System.out.println("Cannot calculate the average");
}
Он будет печататься каждый раз, когда пользователь вводит отрицательное число, но оно должно печататься только в конце, если применимо.
Scanner scanner = new Scanner(System.in);
int input = 0;
double sum = 0;
while (scanner.hasNextDouble()) {
double userInput = scanner.nextDouble();
// Only add to sum if > 0
if (userInput > 0) {
input = 1;
sum = userInput;
}
else if (userInput == 0) {
break;
}
// Ignore negative numbers
}
// If input > 0 there was at least one positive number
if (input > 0) {
System.out.println(sum / input);
}
else {
System.out.println("Cannot calculate the average");
}
Ответ №3:
Вы получаете NaN (не число). Это не ошибка, это специальное значение. Когда вы пытаетесь разделить double type zero на другой double type zero, вы всегда получите NaN. Это происходит, потому что вы назначаете double input = 0 и double sum = 0, затем цикл while{} прерывается, когда первый ввод пользователя равен нулю, затем ваша программа делит сумму на ввод (0 на 0) и все — NaN.
Комментарии:
1. хорошо, но ожидаемый результат nnot… что бы это ни значило.