You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java使用LocalDate实现周一订单10%折扣运行报错求助

报错原因

  • 你在构造方法中直接写2021-09-26会被Java识别为三个int数值做减法运算(2021减9减26),而非日期类型:
    1. 以0开头的数字会被识别为八进制数,八进制合法取值范围是0-7,所以09会报超出int范围的错误
    2. 你传入的第二个参数是int运算结果,和构造器要求的LocalDate类型不匹配,所以会报构造器未定义的错误
  • 现有代码里的sunday变量没有赋值逻辑,永远是默认值false,折扣逻辑完全不会生效,也不符合你要的周一打折的需求。

修复方案

  1. 修正main方法的日期传参:使用LocalDate.of(年, 月, 日)方法生成LocalDate对象传入构造器
  2. 修改Pedido类的折扣逻辑:删除无用的sunday变量,通过datapedido.getDayOfWeek()判断是否为周一,匹配DayOfWeek.MONDAY枚举值即可触发折扣
  3. 建议遵循Java命名规范,类名首字母大写(pedido改为Pedido,program改为Program)

修复后完整代码

Pedido类

package pedido;
import java.time.DayOfWeek;
import java.time.LocalDate;

public class Pedido {

    private int numero;
    private LocalDate datapedido;
    private double quantidade, valor, total;

    public Pedido(int m, LocalDate j, double p, double k) {
        this.numero = m;
        this.datapedido = j;
        this.quantidade = p;
        this.valor = k;
    }
        
    
    public void totalpedido() {
        if(datapedido.getDayOfWeek() == DayOfWeek.MONDAY) {
            total = (this.valor * this.quantidade) * 0.9;
            System.out.printf("今日为周一,订单总金额享受10%折扣,最终金额:R$%.2f%n", total);
        } else {
            total = (this.valor * this.quantidade);
            System.out.printf("订单总金额为:%.2f%n", total);
        }
    }
    
}

Program类

package pedido;
import java.time.LocalDate;

public class Program {

    public static void main(String[] args) {
        Pedido p1 = new Pedido(111, LocalDate.of(2021,9,26), 2, 36.50);
        p1.totalpedido();
        
        Pedido p2 = new Pedido(222, LocalDate.of(2021,9,23), 1, 13.25);
        p2.totalpedido();
    }

}

运行说明

2021年9月26日是周日,不触发折扣,p1总金额为73.00;2021年9月23日是周四,不触发折扣,p2总金额为13.25。如果传入周一的日期(比如2021-09-27),就会自动计算10%的折扣。

内容的提问来源于stack exchange,提问作者Guilherme Gusman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:54:03