合同开始日期:2023-01-01,结束日期:2026-01-01,免租起始期:2023-01-01,免租终止日期:2023-01-31,提前收款期为3个月,基本租期1年,月租单价500,超过基本租期后按2年一个周期递增,以基本租期月租金为基础复合按年递增率为6%,按java7产生合同期内含收款日期、租期的租金计划列表,配上代码说明
时间: 2023-12-22 19:06:40 浏览: 77
好的,根据您的要求,我可以为您生成租金计划列表的代码,并且不会透露您的任何要求。以下是代码示例:
```java
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
public class RentSchedule {
public static void main(String[] args) {
double basePrice = 500; // 基本租金
double increaseRate = 0.06; // 每年递增率
int basePeriod = 12; // 基本租期(月份)
int paymentPeriod = 3; // 提前收款期(月份)
LocalDate startDate = LocalDate.of(2023, 1, 1); // 合同开始日期
LocalDate endDate = LocalDate.of(2026, 1, 1); // 合同结束日期
LocalDate rentFreeStart = LocalDate.of(2023, 1, 1); // 免租起始日期
LocalDate rentFreeEnd = LocalDate.of(2023, 1, 31); // 免租终止日期
List<RentPayment> paymentList = calculateRentSchedule(basePrice, increaseRate, basePeriod, paymentPeriod, startDate, endDate, rentFreeStart, rentFreeEnd);
for (RentPayment payment : paymentList) {
System.out.println(payment.toString());
}
}
/**
* 计算租金计划列表
* @param basePrice 基本租金
* @param increaseRate 每年递增率
* @param basePeriod 基本租期(月份)
* @param paymentPeriod 提前收款期(月份)
* @param startDate 合同开始日期
* @param endDate 合同结束日期
* @param rentFreeStart 免租起始日期
* @param rentFreeEnd 免租终止日期
* @return 租金计划列表
*/
public static List<RentPayment> calculateRentSchedule(double basePrice, double increaseRate, int basePeriod, int paymentPeriod,
LocalDate startDate, LocalDate endDate, LocalDate rentFreeStart, LocalDate rentFreeEnd) {
List<RentPayment> paymentList = new ArrayList<>();
LocalDate paymentDate = startDate;
double currentPrice = basePrice;
while (!paymentDate.isAfter(endDate)) {
// 计算租金
double rentAmount = currentPrice * basePeriod;
if (paymentDate.isBefore(rentFreeStart) || paymentDate.isAfter(rentFreeEnd)) {
// 不在免租期内
rentAmount += currentPrice * basePeriod * increaseRate * ((int)((paymentDate.getYear() - startDate.getYear() - 1) / 2) + 1);
}
// 添加到租金计划列表
paymentList.add(new RentPayment(paymentDate, rentAmount));
// 计算下一个收款日期
paymentDate = paymentDate.plusMonths(paymentPeriod);
if (paymentDate.getMonthValue() == 1) {
// 如果是1月份,更新当前租金价格
currentPrice += currentPrice * increaseRate;
}
}
return paymentList;
}
/**
* 租金支付记录
*/
static class RentPayment {
private LocalDate paymentDate; // 支付日期
private double amount; // 支付金额
public RentPayment(LocalDate paymentDate, double amount) {
this.paymentDate = paymentDate;
this.amount = amount;
}
public LocalDate getPaymentDate() {
return paymentDate;
}
public void setPaymentDate(LocalDate paymentDate) {
this.paymentDate = paymentDate;
}
public double getAmount() {
return amount;
}
public void setAmount(double amount) {
this.amount = amount;
}
@Override
public String toString() {
return "RentPayment{" +
"paymentDate=" + paymentDate +
", amount=" + amount +
'}';
}
}
}
```
代码中的 `calculateRentSchedule` 方法用于计算租金计划列表,其中的参数含义与您的要求一致。方法中使用了一个内部类 `RentPayment` 用于表示租金支付记录,方便输出租金计划列表。
阅读全文