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
- 运行 (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 / 3 | 1 | 直接截断小数部分,不四舍五入。 |
| 小数除法 | 5.0 / 3 | 1.666… | 只要有一个操作数是小数,结果就是小数。 |
| 整数除零 | 5 / 0 | 报错 | 抛出 ArithmeticException,程序崩溃。 |
| 小数除零 | 5.0 / 0 | Infinity | 结果为“无穷大”,程序不会崩溃。 |
数学工具类 (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?