#java
#java
Вопрос:
Это проблема для школы
Напишите метод drivingCost()
с входными параметрами drivenMiles
, milesPerGallon
, и dollarsPerGallon
, , который возвращает долларовую стоимость проезда в этих милях. Все элементы имеют тип double
. Если метод вызывается с
50 20.0 3.1599
метод возвращает 7.89975
.
Определите этот метод в программе, входными данными которой являются мили / галлон автомобиля и доллары на бензин / галлон (оба удваиваются). Выведите стоимость бензина для 10 миль, 50 миль и 400 миль, вызвав свой drivingCost()
метод три раза.
Выводите каждое значение с плавающей запятой с двумя цифрами после запятой, что может быть достигнуто следующим образом:
System.out.printf("%.2f", yourValue);
Вывод заканчивается новой строкой.
Пример: если входные данные:
20.0 3.1599
результат:
1.58 7.90 63.20
Ваша программа должна определить и вызвать метод:
public static double drivingCost(double drivenMiles, double milesPerGallon, double dollarsPerGallon)
Пока мой код, кажется, имеет смысл, но я продолжаю получать эту ошибку, и я не уверен, что это значит,
Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.Scanner.throwFor(Scanner.java:937)
at java.base/java.util.Scanner.next(Scanner.java:1594)
Вот мой код
import java.util.Scanner;
public class LabProgram {
public static double drivingCost(double drivenMiles, double milesPerGallon, double dollarsPerGallon) {
double totalCost = (dollarsPerGallon * drivenMiles) / milesPerGallon;
return totalCost;
}
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
double milesPerGallon = scnr.nextDouble();
double dollarsPerGallon = scnr.nextDouble();
double drivenMiles = scnr.nextDouble();
System.out.printf("%.2f ", drivingCost(drivenMiles, milesPerGallon, dollarsPerGallon) * 10);
System.out.printf("%.2f ", drivingCost(drivenMiles, milesPerGallon, dollarsPerGallon) * 50);
System.out.printf("%.2fn", drivingCost(drivenMiles, milesPerGallon, dollarsPerGallon) * 400);
}
}
Комментарии:
1. В какой среде вы запускаете код? Некоторые требуют, чтобы вы указывали ввод в стандартный ввод перед запуском программы.
2. Невозможно воспроизвести
3. Привет, мой ответ вам помог?
Ответ №1:
drivenMiles
это не один из входных данных, вы предоставляете его в вызовах drivingCost()
.
System.out.printf("%.2f ", drivingCost(10, milesPerGallon, dollarsPerGallon));
System.out.printf("%.2f ", drivingCost(50, milesPerGallon, dollarsPerGallon));
System.out.printf("%.2fn", drivingCost(400, milesPerGallon, dollarsPerGallon));
Причина, по которой вы получаете NoSuchElementException
, заключается в том, что существует только два входных параметра, и вы пытаетесь прочитать три параметра.
Ответ №2:
Чтобы избежать такого рода ошибок, всегда проверяйте пользовательский ввод.
Это можно сделать с помощью hasNextDouble
:
Scanner scnr = new Scanner(System.in);
double milesPerGallon = (scnr.hasNextDouble() ? sc.nextDouble() : 0.0;
Также всегда будьте осторожны Divison by Zero
.
Код выдаст исключение, если milesPerGallon
равно нулю. Итак, решите это с помощью троичного операнда:
double totalCost = (dollarsPerGallon * drivenMiles) / (milesPerGallon!=0?milesPerGallon:1);
Хотя приведенный выше код приводит к правильному результату.
Изменение приведенного ниже кода имеет немного больше смысла:
return (drivenMiles / (milesPerGallon!=0?milesPerGallon:1)) * dollarsPerGallon;
Правильный код:
import java.util.Locale;
import java.util.Scanner;
public class LabProgram {
public static double drivingCost(double drivenMiles, double milesPerGallon, double dollarsPerGallon) {
//Avoid Division by zero
return (drivenMiles / (milesPerGallon!=0?milesPerGallon:1)) * dollarsPerGallon;
}
public static void main(String[] args) {
//Fix user input to US number formats
Locale.setDefault(Locale.ENGLISH);
Scanner scnr = new Scanner(System.in);
double milesPerGallon = (scnr.hasNextDouble()) ? scnr.nextDouble() : 0.00;
double dollarsPerGallon = (scnr.hasNextDouble()) ? scnr.nextDouble() : 0.00;
System.out.printf("10mi: $%.2f " , drivingCost( 10, milesPerGallon, dollarsPerGallon));
System.out.printf("50mi: $%.2f " , drivingCost( 50, milesPerGallon, dollarsPerGallon));
System.out.printf("400mi: $%.2fn", drivingCost(400, milesPerGallon, dollarsPerGallon));
}
}
Скомпилируйте это с помощью: javac LabProgram.java
Запустите это с помощью: java LabProgram
Вывод:
20.0 3.1599
10mi: $1.58 50mi: $7.90 400mi: $63.20`
Ответ №3:
Хотя я здесь слишком поздно, все еще публикую это для тех, кто борется с этим. Следующий код дал мне правильный вывод:
import java.util.Scanner;
public class LabProgram {
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
Double milesPerGallon = 0.0;
Double dollarsPerGallon = 0.0;
Double gasCost = 0.0;
Double gasCost20 = 0.0;
Double gasCost75 = 0.0;
Double gasCost500 = 0.0;
milesPerGallon = scnr.nextDouble();
dollarsPerGallon = scnr.nextDouble();
gasCost = dollarsPerGallon / milesPerGallon;
gasCost20 = gasCost * 20;
System.out.printf("%.2f", gasCost20);
System.out.print(" ");
gasCost75 = gasCost * 75;
System.out.printf("%.2f", gasCost75);
System.out.print(" ");
gasCost500 = gasCost * 500;
System.out.printf("%.2f%n", gasCost500);
}
}