Java0317初尝试与报错

news/2025/3/18 17:53:19/

支付模块:27min讲了打开神秘开关

在前面讲了@Data,@NoArgsConstructor,@AllArgsConstructor

lombok技术

报错1

package com.itheima.demo; public class GoldCard extends Card { @Override public void cost(double money){ //消费八折 setMoney(getMoney()-money*0.8); //消费满200打印洗车票 if (money*0.8>=200) {printTk();} public void printTk() { System.out.println("打印洗车"); } } } 为何报错

在Java中,方法定义不能嵌套。在您提供的代码中,printTk 方法定义在 cost 方法的内部,这是不允许的,因此编译器会报错。

即:不能在函数里面写别的函数

要解决这个问题,您需要将 printTk 方法定义在 GoldCard 类的顶层,与 cost 方法同级。以下是修改后的代码:

java

复制

package com.itheima.demo;public class GoldCard extends Card {@Overridepublic void cost(double money){// 消费八折setMoney(getMoney() - money * 0.8);// 消费满200打印洗车票if (money * 0.8 >= 200) {printTk();}}// 将printTk方法移到cost方法外面,与cost方法同级public void printTk() {System.out.println("打印洗车票");}
}

这样修改后,printTk 方法就可以被 cost 方法正常调用了,而且代码结构也更加清晰。记得确保 Card 类中存在 setMoney 和 getMoney 方法,否则这段代码仍然无法编译通过。同时,请确保 printTk 方法的逻辑符合您的业务需求。

 

为什么无法解析符号“c”

ChatGLM

从图片中可以看到,问题出现在以下代码行:

java

复制

public static void pay(Card c)

java

复制

c.

错误信息指出无法解析符号 “c”。这通常是因为变量或参数没有被正确地声明或初始化。在这个上下文中,“c” 是一个参数,它应该在调用 pay 方法时传递一个有效的 Card 对象。

检查以下几点可能有助于解决问题:

  1. 确保 Card 类存在并且正确导入:确认 Card 类已经定义并且在当前文件中正确导入了。

  2. 检查 pay 方法的调用:确保在调用 pay 方法时传递了一个有效的 Card 对象。例如:

    java

    复制

    GoldCard gd = new GoldCard("name", "phone", "card");
    Test0.pay(gd);  // 确保这里传递的是正确的对象类型
    
  3. 确保 GoldCard 继承自 Card:根据图片中的目录结构,GoldCard 应该继承自 Card 类。确保这一点没有问题。

  4. 检查语法错误:有时简单的拼写错误也会导致这样的问题。确保所有括号、逗号和其他符号都正确无误。

  5. 调试代码:逐步运行代码,检查变量的值是否如预期那样变化。

通过这些步骤,你应该能够找到并解决无法解析符号 “c” 的问题。

用户_uBiEPA

test类:package com.itheima.demo; import java.util.Scanner; public class Test0 { public static void main(String[] args) { GoldCard gd=new GoldCard("w","139","苏",345); public static void pay(Card c) { Scanner sc=new Scanner(System.in); double money=sc.nextDouble(); } } } Card类:package com.itheima.demo; public class Card { private String name; private String phone; private double money; private String card; public String getCard() { return card; } public void setCard(String card) { this.card = card; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public double getMoney() { return money; } public void setMoney(double money) { this.money = money; } public void deposit(double money){ this.money+=money; } public void cost(double money){ this.money-=money; } public Card(String name, String phone, String card, double money) { this.name = name; this.phone = phone; this.card = card; this.money = money; } } c为何不能解析

ChatGLM

 

在你的 Test0.java 文件中,pay 方法被定义为静态方法,但是你在 main 方法中没有正确地调用它。静态方法的调用不需要创建类的实例,可以直接通过类名来调用。

此外,你的 GoldCard 构造函数缺少参数的类型声明,这会导致编译错误。构造函数应该明确指定每个参数的数据类型。

下面是修正后的代码:

java

复制

package com.itheima.demo;import java.util.Scanner;public class Test0 {public static void main(String[] args) {GoldCard gd = new GoldCard("W", "139", "苏", 345.0);pay(gd); // 正确调用静态方法}public static void pay(Card c) { // 静态方法Scanner sc = new Scanner(System.in);double money = sc.nextDouble();// 这里可以添加更多的支付逻辑}
}class GoldCard extends Card {public GoldCard(String name, String phone, String card, double money) {super(name, phone, card, money);}// 其他方法和逻辑...
}

请注意以下几点:

  1. GoldCard 的构造函数现在包含了参数类型声明。
  2. pay 方法现在是静态的,因此在 main 方法中直接通过类名 Test0 调用它。
  3. 我假设 GoldCard 是 Card 的子类,所以使用了 extends 关键字。如果你的设计不同,请相应调整。

确保你的 Card 类也正确实现了相关的属性和方法,以便 GoldCard 能够正常工作。

差不多的问题,因为不能在main里面定义函数 


http://www.ppmy.cn/news/1580119.html

相关文章

高效手机检测:视觉分析技术的优势

在当今社会,手机已成为人们日常生活和工作中不可或缺的工具。然而,在某些特定场合,如考场、工作场所等,手机的使用却可能带来负面影响。因此,如何有效监测和防止在这些场合偷用手机的行为,成为了一个亟待解…

Python游戏开发自学指南:从入门到实践(第四天)

Python不仅适用于数据分析、Web开发和自动化脚本,还可以用于游戏开发!虽然Python不是传统意义上的游戏开发语言,但其简洁的语法和丰富的库使其成为初学者学习游戏开发的绝佳选择。本文将为你提供一份全面的Python游戏开发自学指南&#xff0c…

海鲜水产行业wordpress外贸主题

模板采用清新的海洋风格设计,完美契合水产和海鲜行业的特点,让您的网站在众多竞争者中脱颖而出。 高质量的图片展示区域,让您可以展示新鲜捕捞的海鲜产品,吸引客户的注意力。 多功能性,满足业务需求: 模…

【2025】基于python+django的慢性病健康管理系统(源码、万字文档、图文修改、调试答疑)

系统功能结构图如下 慢性病健康管理系统 课题背景 随着全球人口老龄化的加剧以及生活方式的改变,慢性病的发病率呈上升趋势,给个人健康和社会医疗资源带来了巨大压力。传统的慢性病管理模式存在信息不畅、患者参与度低、医疗资源分配不均等问题&#xf…

Java 分布式高并发重试方案及实现

文章目录 Java 分布式高并发重试方案及实现一、重试机制的背景和意义二、基于 Spring Boot 的重试方案实现1. 使用 Spring Retry 实现重试机制添加依赖开启重试功能定义重试逻辑使用重试服务 2. 使用 Fast-Retry 实现高性能重试引入依赖编程式重试注解式重试 三、重试机制的注意…

C# 一文读懂委托与事件

什么是委托 delegate 诞生:技术点出来的原因就是 有一些需要将方法作为入参 处理的情况 比如 业务处理完需要回调函数 那就需要传函数入参 委托是C#中的一种类型安全函数指针,允许将方法作为参数传递或存储。它本质上是面向对象的,对方法签名…

Vue:添加响应式数据

Vue:添加响应式数据 1. 什么是响应式? 修改 data 后,页面自动改变/刷新,这就是响应式。就像我们在使用 Excel 的时候,修改一个单元格中的数据,其它单元格的数据会联动更新,这也是响应式。在前…

基于FPGA轨道交通6U机箱CPCI脉冲板板卡

板卡简介: 本板为脉冲板,脉冲板主要执行CPU下达的指令,通过实现各种控制算法来调节PWM,然后输出光纤PWM信号来驱动变频器功率模块以达到控制电机的目的。 性能规格: 电源:DC5V;15V FPGA&…