Java使用LocalDate实现周一订单10%折扣运行报错求助
报错原因
- 你在构造方法中直接写
2021-09-26会被Java识别为三个int数值做减法运算(2021减9减26),而非日期类型:- 以0开头的数字会被识别为八进制数,八进制合法取值范围是0-7,所以
09会报超出int范围的错误 - 你传入的第二个参数是int运算结果,和构造器要求的
LocalDate类型不匹配,所以会报构造器未定义的错误
- 以0开头的数字会被识别为八进制数,八进制合法取值范围是0-7,所以
- 现有代码里的
sunday变量没有赋值逻辑,永远是默认值false,折扣逻辑完全不会生效,也不符合你要的周一打折的需求。
修复方案
- 修正main方法的日期传参:使用
LocalDate.of(年, 月, 日)方法生成LocalDate对象传入构造器 - 修改Pedido类的折扣逻辑:删除无用的
sunday变量,通过datapedido.getDayOfWeek()判断是否为周一,匹配DayOfWeek.MONDAY枚举值即可触发折扣 - 建议遵循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
相关产品推荐
相关产品推荐

