分类: JAVA

  • Java Day 2-3 复习笔记 (26.2.2)

    1. 核心实战:房贷计算器进阶

    输入与校验逻辑 (Scanner & Validation)

    使用 Scanner 接收用户输入,并配合 if 语句进行有效性判断(卫语句风格)。

    • 输入工具:JavaScanner scanner = new Scanner(System.in); // 技巧:记不住类型可以用 var scanner = new Scanner(System.in);
    • 校验逻辑 (Guard Clauses):
      • 本金校验:if(p <= 0) $\rightarrow$ 提示 “贷款金额必须 > 0″。
        • 逻辑: 先比较再取反(推荐直接写 p <= 0 而不是 !(p > 0))。
      • 利率校验: if(yr < 1.0 || yr > 36.0) $\rightarrow$ 提示 “年利率必须是 1~36″。
      • 月份校验: if(m < 1 || m > 360) $\rightarrow$ 提示 “贷款月数必须是 1~360″。

    数学计算 (Math Logic)

    • 月利率: double mr = yr / 12.0 / 100;
    • 幂运算: double pow = Math.pow(1 + mr, m);
    • 月供公式: double payment = p * mr * pow / (pow - 1);

    循环拆解 (The Loop)

    计算每月的本金与利息详情,关键在于更新剩余本金

    Java

    for (int i = 0; i < m; i++) {
        double payInterest = p * mr;                 // 1. 偿还利息
        double payPrincipal = payment - payInterest; // 2. 偿还本金
        p -= payPrincipal;                           // 3. 更新剩余本金 (核心)
    
        // 打印每月详情 (i+1 表示月份)
        // ...使用 NumberFormat 格式化输出
    }
    

    格式化输出 (Formatting)

    使用核心类库 NumberFormat 处理货币显示(自动添加  和千分位)。

    • 代码: NumberFormat.getCurrencyInstance(Locale.CHINA).format(变量)
    • 应用: 用于本金、利息、总还款额的显示。

    2. 方法入门 (Methods)

    定义与概念

    把方法想象成**“被折叠的代码”**,调用时才会展开。

    • 语法:Javastatic int add(int a, int b) { // "int a, int b" 是形参 int c = a + b; return c; }

    调用方式

    • 本类调用: int d = add(100, 200); (不用写类名)
    • 跨类调用: TestMethod.add(100, 200);
    • 实参: 调用时传入的实际数值 (如 100200)。

    3. IDE 效率快捷键 (IntelliJ IDEA)

    根据代码注释整理的高频快捷键:

    • 代码补全: Ctrl + Shift + Enter (补全当前语句,如分号、括号)。
    • 类搜索: Ctrl + N (查找核心类库,如 Scanner)。
    • 自动导包/修复: Alt + Enter (引入局部变量、生成变量定义、取反逻辑)。
    • 复制行: Ctrl + D (快速复制当前行代码)。
  • JAVA  Day2~3 26.2.1

    import java.text.NumberFormat;

    import java.util.Locale;

    import java.util.Scanner;

    public class Calculator {

        //代码补全 补全当前语句 Ctrl+Shift+Enter

        public static void main(String[] args) {

            //定义变量:类型 变量名 =

    //        Scanner scanner =new Scanner(System.in);

            //记不住这么多类型也可以在这个例子中用var

    //var scanner =new Scanner(System.in);

            Scanner scanner = new Scanner(System.in);

            //alt + Enter 引入局部变量 快速生成前面的变量定义

            //nextLine nextInt nextDouble

            System.out.println(“请输入本金”);

            double p = scanner.nextDouble();

            System.out.println(“请输入年利率”);

            double yr = scanner.nextDouble();

            double mr = yr / 12.0 / 100;

            System.out.println(“请输入还款月数”);

            int m = scanner.nextInt();

            double pow = Math.pow(1 + mr, m);

            double payment = p * mr * pow / (pow – 1);

            System.out.println(NumberFormat.getCurrencyInstance(Locale.CHINA).format(payment));

        }

    }

    import java.text.NumberFormat;

    import java.util.Locale;

    import java.util.Scanner;

    public class Calculator2 {

        //代码补全 补全当前语句 Ctrl+Shift+Enter

        public static void main(String[] args) {

            //定义变量:类型 变量名 =

    //        Scanner scanner =new Scanner(System.in);

            //记不住这么多类型也可以在这个例子中用var

    //var scanner =new Scanner(System.in);

            //这些都是核心类库实现的 不用重复造轮子

            //Ctrl + N 就可以

            Scanner scanner = new Scanner(System.in);

            //alt + Enter 引入局部变量 快速生成前面的变量定义

            //nextLine nextInt nextDouble

            System.out.println(“请输入本金”);

            double p = scanner.nextDouble();

            if(p<=0) { // 取反的运算符优先级比较高 但是我们应该先比较再取反 所以得用括号

                //这里改回 p<=0 不用 !(p>0) 可以使用 Alt+Enter 取反

                System.out.println(“贷款金额必须 > 0”);

                return;

            }

            System.out.println(“请输入年利率”);

            double yr = scanner.nextDouble();

            if(yr < 1.0 || yr > 36.0) { //这里也不要!(yr >= 1.0 && yr <= 36.0)

                System.out.println(“年利率必须是 1~36”);

                return;

            }

            double mr = yr / 12.0 / 100;

            System.out.println(“请输入贷款月数”);

            int m = scanner.nextInt();

            if(m < 1 || m > 360){ //改一下!(m>=1 && m<=360)

                System.out.println(“贷款月数必须是1~360”);

                return;

            }

            double pow = Math.pow(1 + mr, m);

            double payment = p * mr * pow / (pow – 1);

            System.out.println(NumberFormat.getCurrencyInstance(Locale.CHINA).format(payment));

        }

    }

    public class TestLoop {

        public static void main(String[] args){

            for(int i = 0;i<=3;i++){

                System.out.println(“Hello”);

    //            i=4;

            }

        }

    }

    public class TestSum {

        public static void main(String[] args) {

            int sum = 0;

            for(int i = 1;i<=100;i++){

    //            System.out.println(“sum:” + sum + ” i:” + i);

    //            sum = sum + i;

                sum += i;

            }

            System.out.println(sum);

        }

    }

    public class TestSum {

        public static void main(String[] args) {

            int sum = 0; //Alt + Shift + 上下箭头可以移动 变量的作用范围只在花括号内有效

            for(int i = 1;i<=100;i++){

    //            System.out.println(“sum:” + sum + ” i:” + i);

    //            sum = sum + i;

                sum += i;

            }

            System.out.println(sum);

        }

    }

    这是一份经过深度整理、逻辑连贯的 Java 学习全能笔记

    我将你之前提供的零散片段(环境配置、数学运算、逻辑判断、代码重构)整合成了一个完整的知识体系。这份笔记不仅涵盖了“怎么写代码”,还包含了“怎么写好代码”的职业技巧。

    Java 学习全能笔记:从入门到逻辑进阶

    1. 环境与工具 (Environment & Tools)

    命令行基础 (CMD)

    • 编译 (Compile): javac 文件名.java
      • 注意:必须带 .java 后缀。
    • 运行 (Run): java 类名
      • 注意:不要带后缀,这里使用的是 class 的名字。
    • 乱码解决: Windows 命令行默认 GBK,而代码通常是 UTF-8。
      • 命令:javac -encoding gb18030 xxx.java

    IDE 效率神器 (IntelliJ IDEA)

    • 常用简写:
      • psvm $\rightarrow$ 生成 public static void main…
      • sout $\rightarrow$ 生成 System.out.println…
    • 万能键: Alt + Enter (自动修复错误、导包、逻辑反转)。
    • 文档查看: Ctrl + Q (查看当前类或方法的官方文档)。

    2. 基础语法与类型 (Syntax & Types)

    变量定义

    • 标准格式: 类型 变量名 = 值;
    • 示例:
      • int x = 10;
      • double y = 9.9;
      • char c = ‘A’;
      • String s = “Hello”;

    类型严格性 (Strict Typing)

    警示: Java 是强类型语言。

    • 错误示例: int a = 1000.0;
    • 原因: 不能直接将小数 (double) 塞进整数 (int) 容器中,会报错 incompatible types: possible lossy conversion。

    3. 数学运算与陷阱 (Math Operations)

    除法陷阱 (The Division Trap)

    这是新手最容易踩的坑,请务必区分:

    运算类型代码示例结果说明
    整数除法5 / 31直接截断小数部分,不四舍五入。
    小数除法5.0 / 31.666…只要有一个操作数是小数,结果就是小数。
    整数除零5 / 0报错抛出 ArithmeticException,程序崩溃。
    小数除零5.0 / 0Infinity结果为“无穷大”,程序不会崩溃。

    数学工具类 (Math Class)

    • 幂运算: Java 没有 ^ 运算符。
      • 用法: Math.pow(底数, 指数)
      • 场景: 房贷计算等额本息公式。
    • 其他: Math.max(a, b) 取最大值。

    其他运算符

    • 取模 (%): 取余数,如 5 % 3 = 2。
    • 自增: a++ 等同于 a = a + 1。

    4. 逻辑判断与布尔代数 (Logic & Boolean)

    比较运算符

    结果永远只有 true 或 false。

    • == (等于), != (不等于)
    • >, <, >=, <=

    逻辑运算符 (三大金刚)

    • && (与/AND): 两个条件成立,结果才为真。
    • || (或/OR): 只要有一个条件成立,结果就为真。
    • ! (非/NOT): 黑白颠倒,真变假,假变真。

    易错点:区间判断

    • 数学写法:$1 \le x \le 10$
    • Java 写法:x >= 1 && x <= 10
    • 注意:Java 不支持连续比较,必须拆开写!

    5. 逻辑架构与代码重构 (Structure & Refactoring)

    基础结构: If-Else

    Java

    if (条件) {

        // 条件为 true 时执行

    } else {

        // 条件为 false 时执行

    }

    进阶技巧:卫语句 (Guard Clauses)

    拒绝“嵌套地狱” (Nested Hell): 不要把正确的逻辑一层层包在 if 里。

    • 优化前 (金字塔式):
      Java




      if (User != null) {
    •     if (Age > 18) {
    •         // 执行业务…
    •     }
    • }




    • 优化后 (卫语句 – 推荐):
      • 核心思想:先处理异常/非法情况,直接 return
    • Java




      if (User == null) return; // 拦截1
    • if (Age <= 18) return;    // 拦截2
    • // 执行业务… (代码层级平坦,阅读更清晰)




    IDE 黑科技:逻辑反转 (Invert If)

    • 操作: 光标放在 if 上 $\rightarrow$ Alt + Enter $\rightarrow$ 选择 Invert ‘if’ condition。
    • 作用: 自动将 > 变为 <=, == 变为 !=,并交换代码块。这是练习逻辑思维和重构代码的神器。

    下一步建议:

    目前的笔记已经构建了完美的逻辑基础。接下来的自然步骤是处理“重复性工作”。

    Would you like me to create a concise intro guide for “Loops” (For/While loops) to complete your control flow knowledge?

  • JAVA Day1-2 2026.1.31

    根据你提供的截图,我已经帮你整理好了复习笔记,涵盖了 Java 编译运行的易错点 以及 字符编码(ANSI/GBK/UTF-8) 的核心知识点。

    笔记已创建成功,内容如下:

    Java 基础与编码问题复习笔记

    1. Java 编译与运行命令

    • 编译 (Compile):
      • 指令:javac 文件名.java
      • 注意: 必须带文件后缀名 .java。
      • 错误示例: javac v2 (截图中的报错:Class names… only accepted if annotation processing…)
      • 正确示例: javac v2.java
    • 运行 (Run):
      • 指令:java 类名
      • 注意: 只需要写 class 的名字,不要带 .class 或 .java 后缀。
      • 示例: 虽然文件名是 v2.java,但如果代码里定义的是 class C,运行时应输入 java C。

    2. 字符编码核心区别 (ANSI vs GBK)

    • ANSI:
      • 它不是一种具体的编码,而是系统默认本地编码的代称。
      • 中文简体 Windows 系统中,ANSI 等同于 GBK
      • 在英文系统中,ANSI 等同于 ASCII。
    • GBK:
      • 具体的中文编码标准,兼容 ASCII,是中文 Windows 的默认编码。
    • 关键点: 在 Windows 记事本中保存为 “ANSI” 格式,实际上就是保存成了 GBK 编码。

    3. 常见乱码/编译错误

    • 现象: error: unmappable character for encoding UTF-8 (截图中的报错)。
    • 原因:
      • 源代码文件包含中文(如 “你好”)。
      • 文件保存的编码(通常是 Windows 记事本默认的 GBK/ANSI)与编译器 javac 读取时使用的默认编码(通常是 UTF-8)不一致。
    • 解决方案:
      • 推荐: 使用编辑器(如 Notepad++)将文件格式转换为 UTF-8 (无 BOM) 保存。
      • 临时: 编译时强制指定编码格式,例如:javac -encoding GBK v3.java。

    这是一份基于你上传的截图整理的详细复习笔记,涵盖了从命令行编译到 IDE 配置的全过程。笔记已保存,你随时可以回顾。

    Java 学习笔记:编译、编码与工具配置

    1. 命令行编译与运行 (CMD)

    • 编译 (javac):
      • 核心规则: 必须带上文件后缀名 .java。
      • 易错点: 输入 javac v2 会报错,必须输入 javac v2.java。
    • 运行 (java):
      • 核心规则: 只写类名 (Class Name),不要带 .class 或 .java 后缀。
      • 区分文件名与类名: 如果你的文件名是 v2.java,但代码里定义的是 class C,那么编译后生成的是 C.class。运行时必须输入 java C,而不是 java v2。

    2. 中文乱码与编码问题 (Encoding)

    • ANSI 与 GBK 的关系:
      • ANSI: 是 Windows 系统“默认本地编码”的代称。在简体中文 Windows 下,ANSI 实际上就是 GBK
      • GBK: 是具体的中文编码标准。
    • 乱码报错:
      • 现象: error: unmappable character for encoding UTF-8。
      • 原因: 你的代码文件是用 GBK (Windows 默认) 保存的,但编译器默认按 UTF-8 读取,导致中文无法识别。
    • 解决方案:
      • 指定编码编译: 使用命令 javac -encoding gb18030 v3.java。
      • 避坑: 不要使用 -encoding ansi,Java 编译器不识别 “ANSI” 这个名字,必须用 “GBK” 或 “GB18030″。

    3. 开发工具 (IDE) 设置

    • Eclipse:
      • 快捷键设置: 想要像老手一样用 Alt + / 呼出代码提示,需要去菜单栏 Window -> Preferences -> Keys,搜索 “Content Assist”,把 Binding 改成 Alt + /。
      • 实战: 设置好后,输入 main 再按 Alt + / 就能自动生成主方法。
    • IntelliJ IDEA:
      • 直接输入 psvm 或者 main 即可生成 public static void main 方法,无需额外配置。

    4. JShell 交互式练习

    • 变量命名: 变量名不能以数字开头,例如 var 123 是错误的语法。
    • Scanner: 在 JShell 里也可以用 new Scanner(System.in) 来练习读取输入。

    希望这份笔记能帮你巩固这些基础细节!如果有新的报错截图,随时发给我,我帮你加进笔记里。

    这是一份基于你上传的截图整理的详细复习笔记,涵盖了从命令行编译到 IDE 配置的全过程。笔记已保存,你随时可以回顾。

    Java 学习笔记:编译、编码与工具配置

    1. 命令行编译与运行 (CMD)

    • 编译 (javac):
      • 核心规则: 必须带上文件后缀名 .java。
      • 易错点: 输入 javac v2 会报错,必须输入 javac v2.java。
    • 运行 (java):
      • 核心规则: 只写类名 (Class Name),不要带 .class 或 .java 后缀。
      • 区分文件名与类名: 如果你的文件名是 v2.java,但代码里定义的是 class C,那么编译后生成的是 C.class。运行时必须输入 java C,而不是 java v2。

    2. 中文乱码与编码问题 (Encoding)

    • ANSI 与 GBK 的关系:
      • ANSI: 是 Windows 系统“默认本地编码”的代称。在简体中文 Windows 下,ANSI 实际上就是 GBK
      • GBK: 是具体的中文编码标准。
    • 乱码报错:
      • 现象: error: unmappable character for encoding UTF-8。
      • 原因: 你的代码文件是用 GBK (Windows 默认) 保存的,但编译器默认按 UTF-8 读取,导致中文无法识别。
    • 解决方案:
      • 指定编码编译: 使用命令 javac -encoding gb18030 v3.java。
      • 避坑: 不要使用 -encoding ansi,Java 编译器不识别 “ANSI” 这个名字,必须用 “GBK” 或 “GB18030″。

    3. 开发工具 (IDE) 设置

    • Eclipse:
      • 快捷键设置: 想要像老手一样用 Alt + / 呼出代码提示,需要去菜单栏 Window -> Preferences -> Keys,搜索 “Content Assist”,把 Binding 改成 Alt + /。
      • 实战: 设置好后,输入 main 再按 Alt + / 就能自动生成主方法。
    • IntelliJ IDEA:
      • 直接输入 psvm 或者 main 即可生成 public static void main 方法,无需额外配置。

    4. JShell 交互式练习

    • 变量命名: 变量名不能以数字开头,例如 var 123 是错误的语法。
    • Scanner: 在 JShell 里也可以用 new Scanner(System.in) 来练习读取输入。

    希望这份笔记能帮你巩固这些基础细节!如果有新的报错截图,随时发给我,我帮你加进笔记里。

    这是为你整理的完整 Java 复习笔记,结合了你上传的所有截图(包括编译错误、编码设置、IDE技巧以及 JShell 的语法细节)。

    笔记已为你创建,以下是详细内容供你参考:

    Java 复习笔记:基础、编码与 JShell

    1. 命令行编译与运行 (CMD)

    • 编译 (javac):
      • 规则: 必须带文件后缀名 .java。
      • ❌ 错误: javac v2
      • ✅ 正确: javac v2.java
    • 运行 (java):
      • 规则: 只能写类名,不能带后缀 .class。
      • 文件名 vs 类名: 如果文件名为 v2.java 但代码中定义的是 class C,运行时必须输入 java C。

    2. 编码与乱码问题 (Encoding)

    • 原理: Windows 记事本默认保存为 ANSI (在简体中文系统下即 GBK),而 Java 编译器默认按 UTF-8 读取,遇到中文会报错 unmappable character。
    • 解决方案:
      • 编译时指定编码: javac -encoding gb18030 v3.java (GB18030 兼容性最好)。
      • ❌ 错误尝试: -encoding ansi 是无效的,Java 不识别 “ANSI” 这个名称。

    3. IDE 快捷键与技巧

    • Eclipse:
      • 修改提示快捷键: 去 Window -> Preferences -> Keys -> 搜索 “Content Assist”,将 Binding 改为 Alt + /。
      • 实战: 输入 main 后按 Alt+/ 自动生成主方法。
    • IntelliJ IDEA:
      • psvm -> 自动生成 public static void main…。
      • sout -> 自动生成 System.out.println…。

    4. JShell 交互式练习与语法细节

    • Scanner 输入:
      • 初始化: new Scanner(System.in)。
      • 用法: next() 读取单词,nextLine() 读取整行。
    • 字符 (char) vs 字符串 (String):
      • ‘A’ (单引号) 是字符。”A” (双引号) 是字符串。
      • ❌ 错误: ‘bbb’ (报错 unclosed character literal,字符只能存一个字母)。
      • ❌ 错误: ” (报错 empty character literal,字符不能为空)。
    • 文本块 (Text Block):
      • “”” (三个双引号) 启动后必须换行,如果直接跟内容会报错 illegal text block… missing line terminator。
    • 变量命名:
      • ❌ 错误: var 123 (报错,变量名不能以数字开头)。

    这份笔记已经结合了你最新上传的关于 JShell、转义字符和文本块的截图,内容更加完整了。

    笔记已更新,重点补充了以下 JShell 和语法细节:

    Java 学习复习笔记:基础、编码与 JShell 进阶

    1. 命令行编译与运行 (CMD)

    • 编译: javac 文件名.java (必须带后缀 .java)。
    • 运行: java 类名 (不要带后缀)。
      • 易错点: 文件名和类名不一致时,运行时要写类名 (例如 java C)。

    2. 编码与乱码 (Encoding)

    • 原因: Windows 记事本默认 GBK,javac 默认 UTF-8。
    • 解决: 使用 javac -encoding gb18030 xxx.java。
    • 注意: -encoding ansi 是无效指令。

    3. IDE 效率技巧

    • Eclipse: 将代码提示 (Content Assist) 改为 Alt + /。
    • IntelliJ IDEA: 使用 psvm 生成 main 方法,sout 生成打印语句。

    4. JShell 与基础语法 (重点新增)

    • 输入读取:
      • System.in.read(): 读取单个字符的 ASCII 码 (例如输入 ‘a’ 返回 97,’A’ 返回 65)。
      • Scanner: 使用 new Scanner(System.in)。next() 读取单词,nextLine() 读取整行。
    • 字符 (char) vs 字符串 (String):
      • 单引号 ‘A’ 是字符;双引号 “A” 是字符串。
      • ❌ 错误 ‘bbb’: 字符只能包含一个字母。
      • ❌ 错误 ”: 字符不能为空。
    • 转义字符 (Escape Characters):
      • \n: 换行 (Newline)。
      • \t: 制表符 (Tab),用于对齐。
      • \b: 退格 (Backspace),会“吃掉”前一个字符 (例如 “123\b4” 输出 124)。
      • \\: 输出一个反斜杠。
    • 文本块 (Text Blocks):
      • 使用三个双引号 “””。
      • 关键规则: 开始的 “”” 后面必须换行,不能直接跟文字,否则报错 missing line terminator。