当前位置: 首页 > 知识库问答 >
问题:

Q:执行多个循环和多个if-语句和if-eles-语句||RENTAL CAR CALCULATOR PROJECT

南宫书
2023-03-14

我对该项目的指示如下:

说明:使用sentinel值循环。创建基本租车计算器

向每个用户询问:

车辆类型(可能使用字符串以外的内容,例如:1用于经济型,2用于轿车等)租赁天数计算(针对每位客户):

租金、税费、应付总额。有三种不同的租金选择,价格不同:经济型31.76英镑,轿车40.32英镑,SUV 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进入租赁计算器或按0退出”输入字母时,会出现错误提示,然后控制台再次要求输入。类似地,当在提示“您想租什么车?”时输入字母时,控制台继续打印没有停止的行?我不知道如何解决这个问题?

    我希望我的程序允许进行多个计算输入。但是,在完整的计算输入(天*税*车型)后,控制台会发布摘要数据,而不是循环?2a。在提示“请输入租用天数(例如:3):”和以下用户输入之后。我该如何让我的程序返回到询问“按1键进入租金计算器或按0键退出”的状态?还在用0提示我的摘要数据吗?

  • 共有2个答案

    宰父衡
    2023-03-14

    在这里,我对它进行了一些修改,并将整个过程放入了一个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);
        }
    }
    
    仰雅昶
    2023-03-14

    我只是对你的代码进行了一些“重构”,删除了一些过时的代码,并在其他位置放置了一些其他代码。我还对变量使用了更清晰的命名,并遵循了命名约定。

    你遇到的问题是,你没有在每个catch块中都有一个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);
        }
    }
    

     类似资料:
    • if语句 (实际上是if表达式) OCaml有两种if语句: if boolean-condition then expression if boolean-condition then expression else other-expression 不同于传统的语言,if语句是表达式。它们更类似于C类语言中的三元操作符?: 而不是你所熟悉的if语句。 下面是if语句的简单例子: # le

    • 有可能做如下事情吗: 或者: 我知道用很多if-else语句也可以实现同样的目标,但如果它像上面那样工作,看起来会更干净。

    • 所以程序应该是:-获取用户的输入,直到用户键入“n或N”以显示停止的标志-当用户键入“n或N”时,程序正数和负数和。 还有我得到的 这个错误信息,我不知道是什么问题。提前谢谢你!

    • 问题内容: 我有一些话题要讨论。我有一个24 s / s的代码片段。是我自己的类,表示类似于的功能。 这是一段代码: 从可读性的角度来看,我有些担心。将其更改为24类并使用多态性更好吗?我不相信这将使我的代码可维护…一方面,这些s很清楚,应该很容易理解,另一方面,s太多了。 我的问题相当笼统,但是我正在用Python编写代码,所以我不能使用。 你怎么看? 更新 : 重要的一点是,并且是构造函数,我

    • 我有一些话题要讨论。我有一个24s/s的代码片段。是我自己的类,它表示类似于的功能。 这是一段代码: 我从可读性的角度考虑。是否最好将其更改为24个类并使用多态性?我不相信它会使我的代码可维护。。。一方面,那些if很清楚,应该不难理解,另一方面,if太多了。 我的问题相当笼统,但是我用Python编写代码,所以我不能使用像switch这样的构造。 你觉得呢? 更新: 一件重要的事情是、和是构造函数

    • 下面的代码确实可以按照我需要的方式工作,但是它很难看、太多或者其他一些事情。我看过一些公式,并试图写出一些解决方案,但最终得到的是类似数量的语句。 在这种情况下,有没有一种数学公式对我有利,或者16个if语句是可以接受的? 解释一下代码,这是一种同时回合制游戏。两个玩家各有四个动作按钮,结果来自一个数组(0-3),但如果这有帮助,变量'one'和'two'可以赋值任何值。结果是,0=两个都不赢,1