Q: Выполнение нескольких циклов и нескольких операторов if и if-else-операторов || ПРОЕКТ ПРОКАТА АВТОМОБИЛЬНОГО КАЛЬКУЛЯТОРА

Мои инструкции по проекту были следующими:

Инструкции: Используйте дозорную петлю значения. Чтобы создать базовый калькулятор аренды автомобиля

Спросите каждого пользователя:

Тип транспортного средства (может использовать что-то отличное от строк, например: 1 для экономичного, 2 для седана и т. Д.) Даты аренды Рассчитайте (для каждого клиента):

Стоимость аренды, налоги, общая сумма. Есть три различных варианта аренды с отдельными ставками: Эконом @ 31,76, седан @ 40,32, Внедорожник @ 47,56. [Примечание: учитываются только единицы целого дня (без почасовых ставок)].

Налог с продаж составляет = до 6% на ИТОГО.

Создать сводные данные с помощью:

Количество клиентов Всего собранных денег. Также включите значения IPO, алгоритма и контрольной проверки (проектная документация).

{Что я иду и мой вопрос (ы)}

package tests;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Tester {

public static void main(String []args){
int count=0;
int days;
int cus = 10; 
double DailyFee=0, NontaxTotal, CarType, Total,FullTotal=0;
boolean F1 = false, F2 = false, F3 = false;
Scanner in=new Scanner(System.in);


while (F3 == false) {
    F3 = true;
    System.out.print("Press 1 to enter Rental Calculator or else press 0 to quit\n");
    System.out.println("Please only enter 1 or 0. Also, please only enter number(s) not letter(s)");
    try {
        cus=in.nextInt();
        if (cus == 0 || cus == 1) {
            F3 = true;
        } else {
            F3 = false;
            System.out.println("Number must be either 1 or 0");
        }
    } catch (InputMismatchException ex) {
        F3 = false;
        System.out.println("Invalid entry");
        in.next();
    }
}

    if(cus == 1) { 
        while(F1 == false) {
            F1 = true;
            count++;
            System.out.print("What vehical would you like to rent?\n");
            System.out.println("Enter 1 for an economy car");
            System.out.println("Enter 2 for a sedan car");
            System.out.println("Enter 3 for an SUV");
            // 
            try {
                CarType = in.nextInt();
                if (CarType <= 0 || CarType >= 4) {
                    System.out.print("Number must be 1-3\n");
                    System.out.println("Please enter 1 for an economy car");
                    System.out.println("Enter 2 for a sedan car");
                    System.out.println("Enter 3 for an SUV");

                    F1 = false;
                } else {
                     if (CarType == 1) {
                         F1 = true;
                          DailyFee=31.76;
                } else if(CarType == 2) {
                        F1 = true;
                          DailyFee=40.32;
                } else if(CarType == 3) {
                        F1 = true;
                          DailyFee=47.56;
                }
                while (F2 == false) {
                    F2 = true;
                    try { 
                        System.out.print("Please enter the number of days rented. (Example; 3) : ");
                        days = in.nextInt();
                        if (days <= 0) {
                            System.out.println("Number of days must be more than zero");
                            F2 = false;
                        } else {

                            double x=days;
                            NontaxTotal = (DailyFee * x);
                            Total = (NontaxTotal * 1.06);
                            FullTotal+=Total;
                            F3 = true;

                        }
                    } catch(InputMismatchException ex) {
                        System.out.println("Answer must be a number");
                        F2 = false;
                        in.next();
                        }
                    }
                }
            } catch (InputMismatchException ex) {
                F1 = false;
                System.out.println("Answer must be a number"); 
            }
        }
    }
    in.close();
    System.out.println("Count of customers : " + count);
    System.out.printf("Total of the Day : $ %.2f", FullTotal);

    }
}

{МОИ ВОПРОСЫ}

  1. Когда в подсказку "Нажмите 1, чтобы войти в прокатный калькулятор, введите букву или нажмите 0, чтобы выйти", появится сообщение об ошибке, после чего консоль снова запросит ввод. Аналогичным образом, при вводе письма в ответ на запрос "Какое транспортное средство вы хотели бы арендовать?" консоль продолжает печатать строки без остановки? Я не знаю, как это исправить?

  2. Я хочу, чтобы моя программа позволяла выполнять несколько входных расчетов. Однако после полного ввода расчета (дни * налог * тип автомобиля) консоль публикует сводные данные, а не зацикливается? 2а. После запроса "Пожалуйста, введите количество дней аренды (пример; 3): " и последующего ввода пользователя. Как заставить мою программу вернуться к запросу "Нажмите 1, чтобы войти в Прокатный калькулятор, или нажмите 0, чтобы выйти"? с еще 0 заставляет мои сводные данные?

2 ответа

Решение

Вот, пожалуйста, я немного изменил его и поместил все это в цикл while (while (cus!= 0)), теперь он работает отлично, попробуйте этот код и дайте мне знать, если у вас есть вопросы.

package inter;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Inter {

    public static void main(String []args){
    int count=0;
    int days;
    int cus = 10; // added
    double DailyFee=0, NontaxTotal, CarType, Total,FullTotal=0;
    boolean F1 = false, F2 = false;
    Scanner in=new Scanner(System.in);

    while (cus != 0) {

        while (true) {  
            System.out.println("If there are any customer press 1 else press 0");
        try {           
            cus=in.nextInt();
            if (cus == 0 || cus == 1) {  
                break;
            } else {
                System.out.println("Number must be either 1 or 0");
            }
        } catch (InputMismatchException ex) {
            System.out.println("Invalid entry");
            in.next();
        }
    }

        if(cus == 1) {           
            while(F1 == false) {
                F1 = true;
                count++;
                System.out.print("What vehical would you like to rent?\n");
                System.out.println("Enter 1 for an economy car");
                System.out.println("Enter 2 for a sedan car");
                System.out.println("Enter 3 for an SUV");
                try {
                    CarType = in.nextInt();
                    if (CarType <= 0 || CarType >= 4) {
                        System.out.print("Number must be 1-3\n");
                        System.out.println("Please enter 1 for an economy car");
                        System.out.println("Enter 2 for a sedan car");
                        System.out.println("Enter 3 for an SUV");
                        F1 = false;
                    } else {
                         if (CarType == 1) {
                             F1 = true;
                              DailyFee=31.76;
                    } else if(CarType == 2) {
                            F1 = true;
                              DailyFee=40.32;
                    } else if(CarType == 3) {
                            F1 = true;
                              DailyFee=47.56;
                    }
                    while (F2 == false) {
                        F2 = true;
                        try { 
                            System.out.print("Please enter the number of days rented. (Example; 3) : ");                           
                            days = in.nextInt();
                            if (days <= 0) {
                                System.out.println("Number of days must be more than zero");
                                F2 = false;
                            } else {
                                //days = in.nextInt();
                                double x=days;
                                NontaxTotal = (DailyFee * x);
                                Total = (NontaxTotal * 1.06);
                                FullTotal+=Total;
                            }
                        } catch(InputMismatchException ex) {
                            System.out.println("Answer must be a number");
                            F2 = false;
                            in.next();
                            }
                        }
                    F2 = false;
                    }
                } catch (InputMismatchException ex) {
                    F1 = false;
                    System.out.println("Answer must be a number"); 
                    in.next();
                }
            }
            F1 = false;
        }
    }
    System.out.println("Count of customers : " + count);
    System.out.printf("Total of the Day : $ %.2f", FullTotal);
    }
}

Я просто немного "рефакторинг" вашего кода, удалил устаревший код и разместил другой код в других местах. Я также использовал более четкое именование переменных и следовал соглашениям об именах.

Проблема у вас была в том, что вы не в каждом catch block был in.next(); Это означает, что во время итерации переменная продолжала использовать ту же самую переменную (которая была недействительной), поэтому продолжала циклически повторять сообщения об ошибках.

Теперь этот код далек от совершенства, его все еще можно легко улучшить, но с этого стоит начать.

package tests;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Tester {

    public static void main(String []args){
        int count=0;
        int days;
        int cus;
        int carType;
        double dailyFee=0, nonTaxTotal, total,fullTotal=0;
        boolean checkRunOrQuit = false, chooseTypeVehicle = false, numberOfDAysChosen = false;
        Scanner in=new Scanner(System.in);


        while ( !checkRunOrQuit ) {
            System.out.print("Press 1 to enter Rental Calculator or else press 0 to quit\n");
            System.out.println("Please only enter 1 or 0. Also, please only enter number(s) not letter(s)");
            try {
                cus=in.nextInt();
                switch ( cus ) {
                    case 0: System.out.println("End of application");
                            System.exit(0); // This will actually end your application if the user enters 0, no need to verify later on
                    break;
                    case 1: checkRunOrQuit = true;
                    break;
                    default:
                            System.out.println("Number must be either 1 or 0");
                }
            } catch (InputMismatchException ex) {
                System.out.println("Invalid entry: ");
                in.next();
            }
        }

        while( !chooseTypeVehicle ) { // --> simplified comparison
            count++;
            System.out.print("What vehical would you like to rent?\n");
            System.out.println("Enter 1 for an economy car");
            System.out.println("Enter 2 for a sedan car");
            System.out.println("Enter 3 for an SUV");

            try {
                carType = in.nextInt();
                chooseTypeVehicle = true;
                switch ( carType ) {
                    case 1: dailyFee = 31.76;
                    break;
                    case 2: dailyFee = 40.32;
                    break;
                    case 3: dailyFee = 47.56;
                    break;
                    default:
                        System.out.print("Number must be 1-3\n");
                        System.out.println("Please enter 1 for an economy car");
                        System.out.println("Enter 2 for a sedan car");
                        System.out.println("Enter 3 for an SUV");
                        chooseTypeVehicle = false;
                        break;
                }
            } catch (InputMismatchException ex) {
                System.out.println("Answer must be a number");
                in.next(); // -> you forgot this one.
            }
        }

        while ( !numberOfDAysChosen ) {
            try {
                System.out.print("Please enter the number of days rented. (Example; 3) : ");
                days = in.nextInt();
                if (days <= 0) {
                    System.out.println("Number of days must be more than zero");
                } else {
                    nonTaxTotal = (dailyFee * days);
                    total = (nonTaxTotal * 1.06);
                    fullTotal+=total;
                    numberOfDAysChosen = true;
                }
            } catch(InputMismatchException ex) {
                System.out.println("Answer must be a number");
                in.next();
            }
        }
        in.close();
        System.out.println("Count of customers : " + count);
        System.out.printf("total of the Day : $ %.2f", fullTotal);
    }
}
Другие вопросы по тегам