用java设计一个电话收费程序,收费标准如下:通话在三分钟以下(包含三分钟),收0.2元;3分钟以上,每\超过一分钟(不足\一分钟按一分钟计算),收0.1元;在7:00~19:00之间按上面标准全价收费;其他时间段按半价收费。试计算某人在T时间 通话 S 分钟 的电 话费.
时间: 2024-04-29 22:23:03 浏览: 114
以下是一个可能的实现:
```java
import java.time.LocalTime;
public class PhoneCharge {
private static final double FULL_PRICE_PER_MINUTE = 0.1;
private static final double HALF_PRICE_PER_MINUTE = 0.05;
private static final LocalTime FULL_PRICE_START = LocalTime.of(7, 0);
private static final LocalTime FULL_PRICE_END = LocalTime.of(19, 0);
private static final int SHORT_CALL_THRESHOLD = 3;
private static final double SHORT_CALL_PRICE = 0.2;
public static double calculateCharge(LocalTime time, int duration) {
double pricePerMinute = isFullPrice(time) ? FULL_PRICE_PER_MINUTE : HALF_PRICE_PER_MINUTE;
if (duration <= SHORT_CALL_THRESHOLD) {
return SHORT_CALL_PRICE;
} else {
int fullMinutes = duration - SHORT_CALL_THRESHOLD;
int roundedMinutes = (int) Math.ceil(fullMinutes / 1.0);
return SHORT_CALL_PRICE + roundedMinutes * pricePerMinute;
}
}
private static boolean isFullPrice(LocalTime time) {
return !time.isBefore(FULL_PRICE_START) && !time.isAfter(FULL_PRICE_END);
}
}
```
这个程序中,我们定义了一些常量,包括全价和半价的每分钟收费、全价时间段的开始和结束时间、短通话和长通话的阈值等等。然后,我们实现了一个静态方法 `calculateCharge`,它接受通话时间和通话时长作为参数,返回通话费用。
在方法中,我们首先根据通话时间判断当前是否处于全价时间段,然后根据通话时长计算通话费用。如果通话时长不足等于短通话阈值,直接返回短通话价格;否则,我们计算出超过短通话阈值的分钟数,对其向上取整后乘以每分钟收费,再加上短通话价格,就是总的通话费用了。
在判断全价时间段的方法 `isFullPrice` 中,我们使用了 Java 8 中新引入的 `LocalTime` 类进行时间的比较。如果当前时间在全价时间段内,返回 true,否则返回 false。
下面是一个简单的测试:
```java
public class PhoneChargeTest {
public static void main(String[] args) {
test(LocalTime.of(6, 0), 2, 0.2); // 半价时段,短通话
test(LocalTime.of(6, 0), 5, 0.5); // 半价时段,长通话
test(LocalTime.of(12, 0), 2, 0.2); // 全价时段,短通话
test(LocalTime.of(12, 0), 5, 0.6); // 全价时段,长通话
}
private static void test(LocalTime time, int duration, double expected) {
double actual = PhoneCharge.calculateCharge(time, duration);
if (actual == expected) {
System.out.println("PASS");
} else {
System.out.println("FAIL: expected " + expected + ", but got " + actual);
}
}
}
```
在这个测试中,我们分别测试了半价时段和全价时段、短通话和长通话的情况,检查程序输出的费用是否和预期相同。
阅读全文