public class Valuation {
public static void main(String[] args) {
Valuation valuation = new Valuation();
int metroNum = 46; //请填乘坐地铁次数
double metroKm = 12.9; //请填乘坐地铁距离
int busNum = 46; //请填乘坐公交次数
double busKm = 0.7; //请填乘坐公交距离
String type = "普通卡"; //请填车卡类型(普通卡、学生卡、无卡可不填);
double total = valuation.favorable(metroNum, metroKm, busNum, busKm, type);
System.out.println("您本月乘车大约需要花费 "+Math.round(total)+" 元");
}
//优惠计算
/**
* metroNum 每月乘坐地铁次数
* metroKm 每次乘坐地铁距离
* busNum 每月乘坐公交次数
* busKm 每次乘坐公交距离
* type 车卡类型(普通卡、学生卡、无卡)
*/
public double favorable(int metroNum, double metroKm, int busNum, double busKm, String type){
int max = metroNum > busNum ? metroNum : busNum;
double total = 0;
for(int i=0; i<max; i++){
if(total<=100){
if(i<busNum){
if("普通卡".equals(type)){
total+=(busCost(busKm)*0.5);
}else if("学生卡".equals(type)){
total+=(busCost(busKm)*0.25);
}else{
total+=busCost(busKm);
}
}
if(i<metroNum){
total+=metroCost(metroKm);
}
}else if(total>100&&total<=150){
if(i<busNum){
if("普通卡".equals(type)){
total+=(busCost(busKm)*0.5*0.8);
}else if("学生卡".equals(type)){
total+=(busCost(busKm)*0.25*0.8);
}else{
total+=busCost(busKm);
}
}
if(i<metroNum){
total+=(metroCost(metroKm)*0.8);
}
}else if(total>150&&total<=400){
if(i<busNum){
if("普通卡".equals(type)){
total+=(busCost(busKm)*0.5*0.5);
}else if("学生卡".equals(type)){
total+=(busCost(busKm)*0.25*0.5);
}else{
total+=busCost(busKm);
}
}
if(i<metroNum){
total+=(metroCost(metroKm)*0.5);
}
}else{
if(i<busNum){
total+=busCost(busKm);
}
if(i<metroNum){
total+=metroCost(metroKm);
}
}
}
return total;
}
//计算每次乘坐公交的价格
public double busCost(double km){
if(km<=10){
return 2;
}else{
double large = Math.floor((km/10))*2;
double small = km%10;
if(small==0){
return large+0;
}else if(0<small && small<=5){
return large+1;
}else{
return large+2;
}
}
}
//计算每次乘坐地铁的价格
public double metroCost(double km){
if(km<=12){
if(km<=6){
return 3;
}else{
return 4;
}
}else if(12<km && km<=32){
double subjoin = (km-12)/10;
if(subjoin<=1){
return 4+1;
}else{
return 4+Math.ceil(subjoin);
}
}else{
double subjoin = (km-32)/20;
if(subjoin<=1){
return 6+1;
}else{
return 6+Math.ceil(subjoin);
}
}
}
}
public static void main(String[] args) {
Valuation valuation = new Valuation();
int metroNum = 46; //请填乘坐地铁次数
double metroKm = 12.9; //请填乘坐地铁距离
int busNum = 46; //请填乘坐公交次数
double busKm = 0.7; //请填乘坐公交距离
String type = "普通卡"; //请填车卡类型(普通卡、学生卡、无卡可不填);
double total = valuation.favorable(metroNum, metroKm, busNum, busKm, type);
System.out.println("您本月乘车大约需要花费 "+Math.round(total)+" 元");
}
//优惠计算
/**
* metroNum 每月乘坐地铁次数
* metroKm 每次乘坐地铁距离
* busNum 每月乘坐公交次数
* busKm 每次乘坐公交距离
* type 车卡类型(普通卡、学生卡、无卡)
*/
public double favorable(int metroNum, double metroKm, int busNum, double busKm, String type){
int max = metroNum > busNum ? metroNum : busNum;
double total = 0;
for(int i=0; i<max; i++){
if(total<=100){
if(i<busNum){
if("普通卡".equals(type)){
total+=(busCost(busKm)*0.5);
}else if("学生卡".equals(type)){
total+=(busCost(busKm)*0.25);
}else{
total+=busCost(busKm);
}
}
if(i<metroNum){
total+=metroCost(metroKm);
}
}else if(total>100&&total<=150){
if(i<busNum){
if("普通卡".equals(type)){
total+=(busCost(busKm)*0.5*0.8);
}else if("学生卡".equals(type)){
total+=(busCost(busKm)*0.25*0.8);
}else{
total+=busCost(busKm);
}
}
if(i<metroNum){
total+=(metroCost(metroKm)*0.8);
}
}else if(total>150&&total<=400){
if(i<busNum){
if("普通卡".equals(type)){
total+=(busCost(busKm)*0.5*0.5);
}else if("学生卡".equals(type)){
total+=(busCost(busKm)*0.25*0.5);
}else{
total+=busCost(busKm);
}
}
if(i<metroNum){
total+=(metroCost(metroKm)*0.5);
}
}else{
if(i<busNum){
total+=busCost(busKm);
}
if(i<metroNum){
total+=metroCost(metroKm);
}
}
}
return total;
}
//计算每次乘坐公交的价格
public double busCost(double km){
if(km<=10){
return 2;
}else{
double large = Math.floor((km/10))*2;
double small = km%10;
if(small==0){
return large+0;
}else if(0<small && small<=5){
return large+1;
}else{
return large+2;
}
}
}
//计算每次乘坐地铁的价格
public double metroCost(double km){
if(km<=12){
if(km<=6){
return 3;
}else{
return 4;
}
}else if(12<km && km<=32){
double subjoin = (km-12)/10;
if(subjoin<=1){
return 4+1;
}else{
return 4+Math.ceil(subjoin);
}
}else{
double subjoin = (km-32)/20;
if(subjoin<=1){
return 6+1;
}else{
return 6+Math.ceil(subjoin);
}
}
}
}