назначение оператора if else

#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 in case 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 блоке. Переместите его наружу