我对该项目的指示如下:
说明:使用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提示我的摘要数据吗?
在这里,我对它进行了一些修改,并将整个过程放入了一个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块中
都有一个
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