java 实现 请设计一个地铁计价系统每个乘客有一张地铁卡用于乘坐地铁可以按距高计价或按次计价。请实现以下功能 MetroBillingSysint costint priceint limit -- 初始化系统初始时乘容的地铁卡余额为 0、 次票 次数为 0; 乘坐地铁有两种计 价方式 按距高计价 乘坐 i+l 站的票价为 cost i。 按次计价 一张 次票 的售价为 pric
以下是Java实现的代码:
public class MetroBillingSys { private int[] cost; // 每站票价 private int price; // 次票售价 private int limit; // 次票可搭乘次数 private Map<Integer, Card> cards; // 存储所有地铁卡信息,key为卡号,value为卡信息对象
// 初始化系统
public MetroBillingSys(int[] cost, int price, int limit) {
this.cost = cost;
this.price = price;
this.limit = limit;
cards = new HashMap<>();
}
// 充值
public void recharge(int id, int amount) {
Card card = cards.get(id);
if (card != null) {
card.setBalance(card.getBalance() + amount);
} else {
card = new Card(id, amount);
cards.put(id, card);
}
}
// 购买次票
public boolean purchase(int id) {
Card card = cards.get(id);
if (card == null) {
return false;
}
if (card.getBalance() >= price) {
card.setBalance(card.getBalance() - price);
card.setLimit(card.getLimit() + limit);
return true;
} else {
return false;
}
}
// 乘坐地铁
public boolean commute(int id, int distance) {
Card card = cards.get(id);
if (card == null) {
return false;
}
if (card.getLimit() > 0) {
card.setLimit(card.getLimit() - 1);
return true;
} else if (card.getBalance() > 0) {
int totalCost = 0;
for (int i = 0; i < distance; i++) {
totalCost += cost[i];
}
card.setBalance(card.getBalance() - totalCost);
return true;
} else {
return false;
}
}
// 查询余额和次数
public int[] query(int id) {
Card card = cards.get(id);
if (card == null) {
return null;
}
int[] result = new int[2];
result[0] = card.getBalance();
result[1] = card.getLimit();
return result;
}
// 地铁卡信息类
private class Card {
private int id; // 卡号
private int balance; // 余额
private int limit; // 剩余次数
public Card(int id, int balance) {
this.id = id;
this.balance = balance;
this.limit = 0;
}
public int getId() {
return id;
}
public int getBalance() {
return balance;
}
public void setBalance(int balance) {
this.balance = balance;
}
public int getLimit() {
return limit;
}
public void setLimit(int limit) {
this.limit = limit;
}
}
原文地址: https://www.cveoy.top/t/topic/gEjO 著作权归作者所有。请勿转载和采集!