计程车计价问题考察到了分支语句的使用,以及整型与浮点型数据的转化,今天我来解的这道题既有阶梯计价,又有最后付费需要进行四舍五入的要求
题目如下:
本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
- 起步里程为3公里,起步费10元;
- 超起步里程后10公里内,每公里2元;
- 超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
- 营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
输入格式:
输入在一行中给出输入行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔。
输出格式:
在一行中输出乘客应支付的车费(单位为元),结果四舍五入,保留到元。
解题思路(以下内容为自己写的):
先使用if-else分支语句对不同的里程进行收费计算(结果为double型);
再使用另外一层if-else分支语句对等待时间进行额外收费,结果与里程收费相加(double型);
然后再使用java自带的Math.round函数对收费结果进行int型强制转换四舍五入得到以元为单位的车费。
第一遍代码:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner reader=new Scanner(System.in);
double route=reader.nextDouble();
double charge=0;
int payment=0;
int wait=reader.nextInt();
if(route<=3){
charge=10;
}else if(route<=10){
charge=10+(route-3)*2;
}else if(route>10){
charge=24+(route-10)*3;
}
if(wait>=5){
charge=charge+2*wait/5;
}
payment=(int)Math.round(charge);
System.out.printf("%d",payment);
}
}
结果报错:
经过debug检查发现,求等待时间应该将2*wait/5改为2*(wait/5),若不加括号,假设wait=9,若先乘2再除5结果则为3,若先除5再乘2结果为2,显然题目的要求是先除5得到计费次数再乘单位收费,所以应该先除5再乘2,得到正确答案
修改之后的代码:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner reader=new Scanner(System.in);
double route=reader.nextDouble();
double charge=0;
int payment=0;
int wait=reader.nextInt();
if(route<=3){
charge=10;
}else if(route<=10){
charge=10+(route-3)*2;
}else if(route>10){
charge=24+(route-10)*3;
}
if(wait>=5){
charge=charge+2*(wait/5);
}
payment=(int)Math.round(charge);
System.out.printf("%d",payment);
}
}
修改之后结果:
总结:
对int型变量进行乘除,应考虑题目的要求,相应的更改乘除计算的优先级