java用多线程水果店每逢法定节假日或双休就有一种水果打折。每种水果一年最多有十次最多有十次打折机会,该水果品类打折完毕之后,下一个假日会将打折机会其他品类的水果。假定全年供应苹果,香蕉,橙子三种水果,模拟输出他们交替打折的记录
时间: 2024-05-05 12:19:19 浏览: 154
我可以帮你解决这个问题。需要注意的是,这个问题需要用到多线程的知识,因此需要一定的编程基础。
我们可以设计一个Fruit类表示水果,其中有两个属性:名称和剩余打折次数。然后我们设计一个FruitShop类表示水果店,其中有一个Fruit数组来存储当前供应的所有水果,还有一个discountFruit属性表示当前正在打折的水果,每次打折后会将discountFruit值更换为下一个应该打折的水果。
具体的实现方式如下(注:下面的代码为简化版,只包含关键部分):
```java
class Fruit {
String name;
int discountTimes;
Fruit(String name) {
this.name = name;
this.discountTimes = 10;
}
}
class FruitShop {
Fruit[] fruits = new Fruit[]{new Fruit("apple"), new Fruit("banana"), new Fruit("orange")};
Fruit discountFruit = null;
void start() {
// 模拟一年的时间
for (int i = 1; i <= 365; i++) {
if (isHoliday(i)) {
if (discountFruit == null || discountFruit.discountTimes == 0) {
// 如果没有正在打折的水果或者当前打折的水果打折次数已经用完了
// 则选择下一个应该打折的水果
changeDiscountFruit();
}
// 打折并输出记录
for (Fruit fruit : fruits) {
if (fruit == discountFruit) {
System.out.println(fruit.name + " on sale!");
fruit.discountTimes--;
}
}
}
}
}
void changeDiscountFruit() {
for (int i = 0; i < fruits.length; i++) {
Fruit fruit = fruits[i];
if (fruit == discountFruit) {
// 找到当前正在打折的水果
// 则将下一个水果设为正在打折的水果
if (i == fruits.length - 1) {
discountFruit = fruits[0];
} else {
discountFruit = fruits[i + 1];
}
break;
}
}
}
boolean isHoliday(int day) {
// 判断是否是节假日或双休日
}
}
public static void main(String[] args) {
FruitShop shop = new FruitShop();
shop.start();
}
```
以上代码中,我们设计了一个FruitShop类来模拟水果店的运作。start方法表示一年的时间,每次判断是否是法定节假日或双休日,如果是则进行打折,打折时先判断当前是否有正在打折的水果或者当前打折的水果打折次数是否已经用完,若满足条件则选择下一个应该打折的水果,然后对所有的水果进行打折并输出记录。isHoliday方法用来判断是否是节假日或双休日,这里为了简化处理,我们可以使用一个数组来记录每一天是否是节假日或双休日。
最后,我们可以运行这个程序,模拟输出三种水果交替打折的记录。
阅读全文