#java #if-statement
#java #if-оператор
Вопрос:
редактировать: я переработал часть кода, но я все еще не могу заставить его вычислять скорость, если пользователь вводит менее недели. Мой новый код приведен ниже. любая помощь будет принята с благодарностью. Мне нужно написать код для имитации предоставления предложения по аренде автомобиля, в котором пользователь вводит цвет, количество дней для аренды и выбирает между двумя типами транспортных средств. Для каждого типа есть две ставки, одна еженедельная, одна ежедневная. Затем я должен найти наилучшую скорость и вывести ее. Когда я ввожу white, economy и 4 в приведенном ниже коде, он ничего не выводит. Я думаю, что у меня ошибка в скорости менее недели, но я не могу понять, как это исправить.
import java.util.Scanner;
public class lab3
{
public static final double ECONOMY_DAILY = 25.5;
public static final double FULL_DAILY = 39.4;
public static final double ECONOMY_WEEKLY = 120.5;
public static final double FULL_WEEKLY = 216.25;
public static void main (String[] args)
{
Scanner Keyboard = new Scanner(System.in);
System.out.println("Enter the color of the vehicle:");
//string the next input as color
String color = Keyboard.next();
System.out.println ("Economy or Full:");
// string the type of the vehicle
String Type = Keyboard.next();
// to get the character value to uppercase for the switch statement
char FirstTypeLetter = Type.toUpperCase()
.charAt(0);
System.out.println("For how many days?");
//set days as the next integer entered and calculate the amount of weeks and daysleftover using the / and % operators
int days = Keyboard.nextInt();
int weeks = days/7;
int daysLeftOver = days%7;
double weeksRounded = ((days/7)*100)/100;
double rate1,rate2,rate3;
// create a switch using the variable defined earlier
switch (FirstTypeLetter)
{
// if the Type entry starts with an e
case 'F':
// calculate the 3 rates for full size using the full size constants (could have put this code anywhere above the next if statement.)
rate1 = weeksRounded * FULL_WEEKLY;
rate2 = (weeks * FULL_WEEKLY) (days * FULL_DAILY);
rate3 = (days * ECONOMY_DAILY);
break;
case 'E':
// calculate all available rents for economy using the constants defined earlier
rate1 = weeksRounded * ECONOMY_WEEKLY;
rate2 = (weeks * ECONOMY_WEEKLY) (days * ECONOMY_DAILY);
rate3 = (days * ECONOMY_DAILY);
break;
default:
System.out.println("Try Again!");
rate1 = 0;
rate2 = 0;
rate3 = 0;
}
if ((rate1 < rate2) amp; (rate1 < rate3) amp; (rate1 != 0))
{
// print out the first rate as well as the color and type that the user entered
System.out.printf("This is the best rate for a" " " color " " Type " vehicle for" " " days "days:" "%.2f",rate1);
}
// if not, and if the second rate is cheapest
if ((rate2 < rate1) amp; (rate2 < rate3) amp; (rate1 != 0))
{
// print out the second rate as well as the color and type that the user entered
System.out.printf("This is the best rate for a" " " color " " Type " vehicle for" " " days "days:" "%.2f", rate2);
}
// if the third rate is cheapest then print out that rate
else if ((rate3 < rate2) amp; (rate3 < rate1) amp; (rate3 != 0))
System.out.printf("This is the best rate for a" " " color " " Type " vehicle for" " " days "days:" "%.2f", rate3);
}
}
Комментарии:
1. Вы уверены, что не хотите добавлять
break
incase F
?2. Отформатируйте свой код, и вы увидите, что все, вплоть до первого разрыва, находится в вашем первом if-блоке.
3. Вы должны прочитать следующие соглашения о коде для Java относительно именования переменных. Имена, подобные этим:
FirstTypeLetter
,Type
иKeyboard
сбивают с толку, потому что они похожи на имена классов. Кроме того, в качестве элемента обзора кода рассмотрите более объектно-ориентированный дизайн — вы могли бы создать объект, представляющий каждый тип транспортного средства, содержащий еженедельные и ежедневные тарифы для каждого.
Ответ №1:
Есть некоторые вещи, которые вам нужно учитывать:
- отсутствует разрыв между регистром F и регистром E, это означает, что скорость F будет заменена скоростью E
- Логика сравнения ставок (строка 53) не должна применяться только к регистру ‘E’, который должен отсутствовать в инструкции switch.
- Нет возможности проверить скорость с помощью параметров daily (если количество дней меньше 7, это будет вне цикла (проверьте свою логику, чтобы вычислить ‘rate1’).).
- Вы должны использовать отладчик для проверки значений, присвоенных программе (автоматический модульный тест с JUnit или TestNG станет удобным)
- Если у вас нет отладчика,
System.out.println()
может быть полезно для проверки присвоенных значений, просто не забудьте их удалить.
Ответ №2:
Ваш 2-й и 3-й if stmt в вашем 1-м if блоке. Переместите его наружу