Java0317初尝试与报错

embedded/2025/3/18 7:52:34/

支付模块: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/embedded/173524.html

相关文章

C语言的软件工程

C语言的软件工程 引言 C语言作为一种历史悠久、功能强大的编程语言,在软件工程领域有着广泛的应用。自1972年由Dennis Ritchie开发以来,C语言凭借其高效性能、灵活性以及可移植性,成为了操作系统、嵌入式系统及高性能应用程序开发的首选语言…

Qt MainWindow简单例子(文本编辑)

使用Qt控件练习文本编辑窗口的创建。 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QLabel> #include <QProgressBar>QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass MainWindow : public Q…

【Linux内核系列】:进程板块与文件板块的综合

&#x1f525; 本文专栏&#xff1a;Linux &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; 人生中成功只是一时的&#xff0c;失败却是人生的主旋律&#xff0c;但是如何面对失败却把人分成了不同的样子&#xff0c;有的人会被…

泽众TestOne推出快速测试用例设计,让自动化更快捷

在当今快速迭代的软件开发环境中&#xff0c;测试用例设计的效率和质量直接关系到软件交付的速度和质量。传统测试用例设计方法往往依赖于测试人员的经验&#xff0c;经验不足的测试人员可能无法识别潜在的测试场景&#xff0c;导致关键问题被遗漏。同时&#xff0c;传统方法在…

Socket 、WebSocket、Socket.IO详细对比

WebSocket、Socket 和 Socket.IO 是网络通信中常用的技术&#xff0c;它们在功能、使用场景和实现方式上有明显的异同点。以下是它们的详细对比&#xff1a; 1. Socket 定义 Socket 是一个通用的网络编程接口&#xff0c;用于在网络上实现进程间通信&#xff08;IPC&#xff0…

变量和数据类型——Python

变量 计算机语言中变量的概念源于数学。在数学中&#xff0c;变量指用拉丁字母表示的、值不固定的数据&#xff1b;在计算机语言中&#xff0c;变量指能存储计算结果或表示值的抽象概念——程序在运行期间用到的数据会被保存在计算机的内存单元中。为了方便取内存单元中的数据…

DJ串烧集 2.4.5 | 海量大型DJ串烧歌曲,无广告,无需登录,高清在线播放

DJ串烧集APP是一款音乐播放软件&#xff0c;收录海量DJ串烧歌曲&#xff0c;涵盖多种音乐类型&#xff0c;适合DJ音乐爱好者。用户可以一键收藏喜欢的音乐&#xff0c;并创建歌单进行分类管理。提供高清的在线播放音质&#xff0c;还能下载无损音质的歌曲&#xff0c;随时随地享…

人工智能中的线性代数基础详解

‌ 线性代数是人工智能领域的重要数学基础之一,是人工智能技术的底层数学支柱,它为数据表示、模型构建和算法优化提供了核心工具。其核心概念与算法应用贯穿数据表示、模型训练及优化全过程。更多内容可看我文章:人工智能数学基础详解与拓展-CSDN博客 一、基本介绍 …