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?