当前位置: 首页 > news >正文

第一次课程中的所有动手动脑的问题以及课后实验性的问题

第一次课程中的所有动手动脑的问题以及课后实验性的问题
(我将其以压缩包的形式上传到了博客的文件中)
https://files.cnblogs.com/files/blogs/848082/第一次课程.zip?t=1758794756&download=true
(一)枚举类型相关问题及结论

  1. 问题描述
    运行 EnumTest.java 程序,分析运行结果,总结枚举类型的基本特性及用法。

  2. 实验结论
    • 枚举类型属于引用类型,并非原始数据类型。其每个具体值都对应一个特定的对象,且相同的值引用同一个对象。
    • 对于枚举类型的变量,可直接使用 “==” 运算符和 equals () 方法进行值的比对,二者执行结果等价。
    • 枚举类型可通过 foreach 循环进行迭代遍历,也可在 switch 语句中使用。
    • 枚举类型的取值可通过valueOf(String name)方法从字符串转换得到,通过values()方法获取所有枚举值数组。
    (二)二进制编码相关问题及探究

  3. 问题描述
    明确原码、反码、补码的概念,编写示例程序对正数、负数进行位操作,验证 Java 中数值的二进制表示方式。

  4. 核心概念
    • 原码:符号位加数值的绝对值,正数符号位为 0,负数为 1,如 + 5 原码为 00000101,-5 原码为 10000101。
    • 反码:正数反码与原码相同;负数反码为原码符号位不变,其余位取反,如 - 5 反码为 11111010。
    • 补码:正数补码与原码相同;负数补码为反码加 1,如 - 5 补码为 11111011。

  5. 实验验证

  6. 结论
    Java 中整数采用补码形式存储。从运行结果可见,负数的二进制表示为其补码形式,位运算(如取反)均基于补码进行计算。
    (三)变量作用域与屏蔽原则问题

  7. 问题描述
    分析如下代码的输出结果,探究 Java 中同名变量的屏蔽原则。
    java
    运行
    public class Test {
    private static int value=1;
    public static void main(String[] args){
    int value=2;
    System.out.println(value);
    }
    }

  8. 运行结果
    输出结果为 2。

  9. 原理分析
    Java 中变量遵循 “同名变量的屏蔽原则”:当局部变量与成员变量同名时,在局部变量的作用域内,局部变量会屏蔽成员变量,此时访问的变量为局部变量。若需访问被屏蔽的成员变量,可通过 “类名。成员变量名”(静态成员变量)或 “this. 成员变量名”(非静态成员变量)实现
    (四)浮点数精度问题及解决方案

  10. 问题描述
    运行 TestDouble.java 程序,观察输出结果,分析 double 类型计算不精确的原因,并探究解决方案。

  11. 实验代码与结果

  12. 精度问题原因
    double 类型属于双精度浮点数,在计算机中以二进制形式存储。由于部分十进制小数(如 0.01)无法转换为有限长度的二进制小数,只能以近似值表示,因此在运算过程中会产生精度误差。

  13. 解决方案
    使用java.math.BigDecimal类进行高精度计算,且构建 BigDecimal 对象时需使用字符串作为参数,避免直接使用 double 值(会保留原始精度误差)。示例代码:
    (五)字符串拼接与运算符优先级问题

  14. 问题描述
    分析如下代码的输出结果,解释产生差异的原因。
    java
    运行
    public class StringConcatenation {
    public static void main(String[] args) {
    int X = 100;
    int Y = 200;
    System.out.println("X+Y=" + X + Y);
    System.out.println(X + Y + "=X+Y");
    }
    }

  15. 运行结果

  16. 原因分析
    Java 中 “+” 运算符兼具算术运算和字符串拼接功能,其执行顺序遵循从左到右的结合性:
    • 对于"X+Y=" + X + Y,先计算"X+Y=" + X,将 int 类型的 X 转换为字符串进行拼接,得到"X+Y=100",再与 Y 拼接,最终结果为"X+Y=100200"。
    • 对于X + Y + "=X+Y",先计算X + Y的算术结果 300,再将结果与字符串"=X+Y"拼接,最终结果为"300=X+Y"。

import java.util.Random;
import java.util.Scanner;

public class RandomCodeGenerator {
// 验证码字符集:包含大写字母、小写字母、数字
private static final String CODE_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
// 验证码长度
private static final int CODE_LENGTH = 6;

/*** 生成随机验证码* @return 6位随机验证码字符串*/
public static String generateVerificationCode() {Random random = new Random();StringBuilder codeBuilder = new StringBuilder();for (int i = 0; i < CODE_LENGTH; i++) {// 随机获取字符集中的索引int index = random.nextInt(CODE_CHARACTERS.length());// 拼接字符codeBuilder.append(CODE_CHARACTERS.charAt(index));}return codeBuilder.toString();
}/*** 验证用户输入的验证码是否正确* @param generatedCode 系统生成的验证码* @param userInput 用户输入的验证码* @return 验证结果(true:正确,false:错误)*/
public static boolean verifyCode(String generatedCode, String userInput) {// 忽略大小写验证(可根据需求调整为严格区分)return generatedCode.equalsIgnoreCase(userInput);
}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 生成验证码String verificationCode = generateVerificationCode();System.out.println("【验证码】" + verificationCode);// 提示用户输入System.out.print("请输入上方验证码:");String userInput = scanner.nextLine();// 验证并输出结果if (verifyCode(verificationCode, userInput)) {System.out.println("验证码输入正确!");} else {System.out.println("验证码输入错误,请重试!");}scanner.close();
}

}
具体图片请点击链接到我的文档查看

http://www.hskmm.com/?act=detail&tid=17194

相关文章:

  • 敏捷开发的几个阶段
  • 隐藏在众目睽睽之下:从PEB中解除恶意DLL的链接
  • 设计模式六大原则 - 实践
  • 运营商 API 安全最佳实践、案例与方案推荐(2025)|千万级接口的全链路实战
  • HyperWorks许可与多用户支持
  • react 中 keys 的作用是什么?
  • 破局与进化:火山引擎Data Agent从落地实践到架构未来
  • 五项能力斩获满分!天翼云云WAF获IDC权威认可!
  • 什么样的代码可以称得上是好代码? - 浪矢
  • 微软Teams Channel Agent上线:中国卖家AI赋能品牌出海新机遇与实战策略(2025前瞻) - 详解
  • docker制作
  • lvgl 9.3 style使用导致内存泄漏问题
  • 【AI领域】如何写好Prompt提示词:从新手到进阶的完整指南 - 详解
  • 11_Reactor网络模型
  • 「LNOI2022」盒
  • 【文摘随笔】从业开发工作五年后,再读短篇《孔乙己》——年少不懂孔乙己,长大已成孔乙己
  • 为什么我选择了 PSM 敏捷认证?
  • 外键
  • 菜油
  • 索引
  • 存储过程
  • 编写msyql8.0.21 数据库批量备份脚本
  • 完整教程:基础算法---【差分】
  • Android 源码中如何生成一个platform JKS 文件?
  • WPF小知识
  • 后端面试八股(go 方向)
  • ArcGIS 不重叠且无缝的拓扑检查和修改
  • 2025/9/25
  • 读书笔记:揭开索引的两个常见误区
  • 国标GB28181平台EasyGBS如何赋能路网数字化管理与应急指挥?