1. 引言

Java作为一门面向对象的编程语言,其基础知识是构建复杂程序的基石。本文将对Java程序设计基础章节的核心内容进行系统梳理,涵盖标识符、注释、变量、数据类型转换、各类运算符以及流程控制语句,旨在帮助初学者建立清晰的知识框架,避免常见错误。

2. 标识符与命名规范

2.1 标识符定义

标识符是程序中变量、方法、类、接口等元素的名称。Java标识符必须遵循以下规则:

  • 由字母、数字、下划线(_)和美元符号($)组成
  • 不能以数字开头
  • 不能是Java关键字(如intclasspublic等)
  • 区分大小写

2.2 命名规范(行业约定)

  1. 类名:大驼峰命名法(PascalCase),如StudentInfo
  2. 方法名和变量名:小驼峰命名法(camelCase),如getUserName
  3. 常量名:全大写,单词间用下划线分隔,如MAX_VALUE
  4. 包名:全小写,如com.example.util

2.3 新手易错点

  • ❌ 使用中文或特殊字符(如@#)作为标识符
  • ❌ 使用关键字作为标识符(如int class = 10;
  • ❌ 命名过于简单(如abc),缺乏描述性
  • ✅ 建议:使用有意义的英文单词,如studentAge而非sa

3. 注释的使用

3.1 注释类型

// 单行注释:适用于简短说明

/*
 * 多行注释:适用于较长的说明
 * 可以跨越多行
 */

/**
 * 文档注释:用于生成API文档
 * @param name 用户名
 * @return 欢迎信息
 */
public String welcome(String name) {
    return "Hello, " + name;  // 字符串拼接,返回欢迎信息
}

3.2 注释最佳实践

  1. 解释为什么,而不是是什么:代码本身应该清晰表达"是什么"
  2. 及时更新:修改代码时同步更新注释
  3. 避免过度注释:清晰的代码是最好的注释

3.3 新手易错点

  • ❌ 注释与代码逻辑不一致
  • ❌ 使用无意义的注释(如// 设置变量
  • ❌ 忘记关闭多行注释,导致后续代码被注释

4. 变量与数据类型

4.1 变量声明与初始化

// 声明变量
int age;
String name;

// 声明并初始化
int score = 95;
double price = 19.99;
boolean isPassed = true;
char grade = 'A';

// 同时声明多个变量
int x = 1, y = 2, z = 3;

4.2 基本数据类型

类型 大小 取值范围 默认值 示例
byte 1字节 -128 ~ 127 0 byte b = 100;
short 2字节 -32768 ~ 32767 0 short s = 1000;
int 4字节 -2³¹ ~ 2³¹-1 0 int i = 100000;
long 8字节 -2⁶³ ~ 2⁶³-1 0L long l = 100000L;
float 4字节 约±3.4e38 0.0f float f = 3.14f;
double 8字节 约±1.8e308 0.0d double d = 3.14159;
char 2字节 0 ~ 65535 ‘\u0000’ char c = 'A';
boolean 1位 true/false false boolean flag = true;

4.3 引用数据类型

  • :如StringScanner
  • 接口:如ListMap
  • 数组:如int[]String[]

4.4 新手易错点

  • ❌ 未初始化变量就直接使用(局部变量)
  • ❌ 混淆=(赋值)和==(相等比较)
  • ❌ 整数除法问题:int result = 5 / 2; // 结果是2,不是2.5
  • ❌ 大数溢出:int max = Integer.MAX_VALUE + 1; // 变成最小值

5. 数据类型转换

5.1 自动类型转换(隐式转换)

小范围类型 → 大范围类型,编译器自动完成:

byte b = 10;
int i = b;  // 自动转换

float f = 3.14f;
double d = f;  // 自动转换

char c = 'A';
int ascii = c;  // 自动转换,A的ASCII码是65

5.2 强制类型转换(显式转换)

大范围类型 → 小范围类型,需要显式转换,可能丢失精度:

int i = 300;
byte b = (byte)i;  // 强制转换,可能溢出

double d = 3.14159;
int i = (int)d;  // 强制转换,结果为3,丢失小数部分

float f = 3.14f;
int i = (int)f;  // 结果为3

5.3 新手易错点

  • ❌ 忘记强制转换导致编译错误
  • ❌ 强制转换时数据溢出未处理
  • ❌ 混淆(int)3.14Math.round(3.14)的区别
  • ❌ 字符串转数字时未处理异常:Integer.parseInt("abc");

6. 运算符详解

6.1 算术运算符

int a = 10, b = 3;
System.out.println(a + b);  // 13,加法
System.out.println(a - b);  // 7,减法
System.out.println(a * b);  // 30,乘法
System.out.println(a / b);  // 3,除法(整数除法)
System.out.println(a % b);  // 1,取模(余数)

// 自增自减
int x = 5;
System.out.println(x++);  // 5(先使用后增加)
System.out.println(x);    // 6
System.out.println(++x);  // 7(先增加后使用)

6.2 关系运算符

int a = 10, b = 20;
System.out.println(a == b);  // false,等于
System.out.println(a != b);  // true,不等于
System.out.println(a > b);   // false,大于
System.out.println(a < b);   // true,小于
System.out.println(a >= b);  // false,大于等于
System.out.println(a <= b);  // true,小于等于

6.3 逻辑运算符

boolean x = true, y = false;
System.out.println(x && y);  // false,逻辑与(两个都为真才为真)
System.out.println(x || y);  // true,逻辑或(一个为真就为真)
System.out.println(!x);      // false,逻辑非

// 短路特性
int a = 10;
if (a > 5 || a++ > 0) {  // 第一个条件为真,第二个不执行
    System.out.println(a);  // 输出10,a++未执行
}

6.4 赋值运算符

int a = 10;
a += 5;   // a = a + 5,结果为15
a -= 3;   // a = a - 3,结果为12
a *= 2;   // a = a * 2,结果为24
a /= 4;   // a = a / 4,结果为6
a %= 4;   // a = a % 4,结果为2

6.5 三元运算符

int score = 85;
String result = (score >= 60) ? "及格" : "不及格";
System.out.println(result);  // 输出"及格"

6.6 位运算符(了解即可)

int a = 5;  // 二进制 0101
int b = 3;  // 二进制 0011

System.out.println(a & b);   // 1(按位与:0001)
System.out.println(a | b);   // 7(按位或:0111)
System.out.println(a ^ b);   // 6(按位异或:0110)
System.out.println(~a);      // -6(按位取反)
System.out.println(a << 1);  // 10(左移1位:1010)
System.out.println(a >> 1);  // 2(右移1位:0010)

6.7 运算符优先级

从高到低:

  1. () 括号
  2. ++ -- ! ~ 一元运算符
  3. * / % 乘除模
  4. + - 加减
  5. << >> >>> 移位
  6. < <= > >= instanceof 关系
  7. == != 相等
  8. & 按位与
  9. ^ 按位异或
  10. | 按位或
  11. && 逻辑与
  12. || 逻辑或
  13. ?: 三元
  14. = += -= 等赋值

6.8 新手易错点

  • ❌ 混淆===if (a = 5)应该是if (a == 5)
  • ❌ 整数除法问题:5 / 2结果是2,不是2.5
  • ❌ 忽略运算符优先级:a + b * c不等于(a + b) * c
  • ❌ 自增自减的前后区别理解不清

7. 流程控制语句

7.1 if语句

// 基本if
int score = 85;
if (score >= 60) {
    System.out.println("及格");
}

// if-else
if (score >= 90) {
    System.out.println("优秀");
} else if (score >= 80) {
    System.out.println("良好");
} else if (score >= 60) {
    System.out.println("及格");
} else {
    System.out.println("不及格");
}

// 嵌套if
if (score >= 60) {
    if (score >= 80) {
        System.out.println("可以评优");
    }
}

7.2 switch语句

int day = 3;
switch (day) {
    case 1:
        System.out.println("星期一");
        break;
    case 2:
        System.out.println("星期二");
        break;
    case 3:
        System.out.println("星期三");
        break;
    case 4:
        System.out.println("星期四");
        break;
    case 5:
        System.out.println("星期五");
        break;
    case 6:
    case 7:
        System.out.println("周末");
        break;
    default:
        System.out.println("无效的日期");
}

// Java 12+ 新语法(了解)
String result = switch (day) {
    case 1, 2, 3, 4, 5 -> "工作日";
    case 6, 7 -> "周末";
    default -> "无效";
};

7.3 for循环

// 基本for循环
for (int i = 0; i < 5; i++) {
    System.out.println("i = " + i);
}

// 嵌套循环(打印九九乘法表)
for (int i = 1; i <= 9; i++) {
    for (int j = 1; j <= i; j++) {
        System.out.print(j + "×" + i + "=" + (i * j) + "\t");
    }
    System.out.println();
}

// 增强for循环(foreach)
int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
    System.out.println(num);
}

7.4 while循环

// while循环
int count = 0;
while (count < 5) {
    System.out.println("count = " + count);
    count++;
}

// do-while循环(至少执行一次)
int num = 0;
do {
    System.out.println("num = " + num);
    num++;
} while (num < 3);

7.5 循环控制语句

// break:跳出整个循环
for (int i = 0; i < 10; i++) {
    if (i == 5) {
        break;  // 当i等于5时跳出循环
    }
    System.out.println(i);  // 输出0-4
}

// continue:跳过本次循环,继续下一次
for (int i = 0; i < 5; i++) {
    if (i == 2) {
        continue;  // 跳过i=2的这次循环
    }
    System.out.println(i);  // 输出0,1,3,4
}

// 带标签的break(跳出多层循环)
outer:
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        if (i == 1 && j == 1) {
            break outer;  // 跳出外层循环
        }
        System.out.println("i=" + i + ", j=" + j);
    }
}

7.6 新手易错点

  • if语句:忘记写花括号{},导致只有第一句受if控制
  • switch语句:忘记写break,导致case穿透
  • for循环:死循环for (int i = 0; i < 10; i--)
  • while循环:忘记更新循环条件,导致死循环
  • ❌ 在循环内修改循环变量导致逻辑混乱

8. 综合示例与易错点总结

8.1 综合示例:成绩评级系统

import java.util.Scanner;

public class GradeSystem {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.print("请输入学生成绩(0-100):");
        int score = scanner.nextInt();
        
        // 数据验证
        if (score < 0 || score > 100) {
            System.out.println("成绩无效!请输入0-100之间的数字。");
            return;
        }
        
        // 成绩评级
        String grade;
        if (score >= 90) {
            grade = "A";
        } else if (score >= 80) {
            grade = "B";
        } else if (score >= 70) {
            grade = "C";
        } else if (score >= 60) {
            grade = "D";
        } else {
            grade = "F";
        }
        
        // 使用switch输出评价
        switch (grade) {
            case "A":
                System.out.println("优秀!继续保持!");
                break;
            case "B":
                System.out.println("良好!还有提升空间。");
                break;
            case "C":
                System.out.println("中等!需要更加努力。");
                break;
            case "D":
                System.out.println("及格!要加油了。");
                break;
            case "F":
                System.out.println("不及格!需要重点补习。");
                break;
        }
        
        // 使用for循环打印成绩趋势(假设有5次考试)
        System.out.println("\n最近5次考试成绩趋势:");
        int[] recentScores = {85, 78, 92, 65, score};
        for (int i = 0; i < recentScores.length; i++) {
            System.out.println("第" + (i + 1) + "次:" + recentScores[i] + "分");
        }
        
        scanner.close();
    }
}

8.2 十大常见错误总结

  1. 变量未初始化:局部变量使用前必须初始化
  2. 整数除法5 / 2 = 2,不是2.5
  3. if条件赋值if (a = 5)应该是if (a == 5)
  4. switch忘记break:导致case穿透
  5. 死循环:循环条件永远为真
  6. 数组越界:访问arr[arr.length]
  7. 字符串比较用==:应该用equals()
  8. 浮点数精确比较:应该用误差范围比较
  9. 大数溢出int max = Integer.MAX_VALUE + 1
  10. 资源未关闭:如Scanner、文件流等

9. 学习建议与总结

9.1 学习建议

  1. 多动手实践:理论知识必须通过代码实践来巩固
  2. 善用调试工具:学会使用IDE的调试功能排查问题
  3. 理解内存模型:了解栈、堆的区别,理解值传递和引用传递
  4. 培养代码规范:从开始就养成良好的编码习惯
  5. 学会查阅文档:官方A

10. 实战练习题

本章提供一系列编程练习题,涵盖变量、运算符、流程控制等核心知识点。每道题包含题目描述、解题思路提示和参考答案(可折叠查看)。建议先独立完成,再对照参考答案。

10.1 基础计算器

题目描述
编写一个Java程序,实现一个简单的四则运算计算器。程序要求:

  1. 从控制台接收两个整数和一个运算符(+、-、*、/)
  2. 根据运算符进行相应的计算
  3. 输出计算结果
  4. 考虑除数为0的情况

解题思路提示

  1. 使用Scanner类获取用户输入
  2. 使用switch语句或if-else判断运算符
  3. 除法运算前检查除数是否为0
  4. 注意整数除法的结果可能丢失小数部分
参考答案(点击展开)
import java.util.Scanner;

public class BasicCalculator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.print("请输入第一个整数: ");
        int num1 = scanner.nextInt();
        
        System.out.print("请输入运算符(+, -, *, /): ");
        char operator = scanner.next().charAt(0);
        
        System.out.print("请输入第二个整数: ");
        int num2 = scanner.nextInt();
        
        int result = 0;
        boolean validOperation = true;
        
        switch (operator) {
            case '+':
                result = num1 + num2;
                break;
            case '-':
                result = num1 - num2;
                break;
            case '*':
                result = num1 * num2;
                break;
            case '/':
                if (num2 != 0) {
                    result = num1 / num2; // 整数除法
                } else {
                    System.out.println("错误:除数不能为0!");
                    validOperation = false;
                }
                break;
            default:
                System.out.println("错误:不支持的运算符!");
                validOperation = false;
        }
        
        if (validOperation) {
            System.out.println("计算结果: " + num1 + " " + operator + " " + num2 + " = " + result);
        }
        
        scanner.close();
    }
}

10.2 成绩等级判断

题目描述
编写一个Java程序,根据输入的百分制成绩输出相应的等级:

  • 90分及以上:优秀
  • 80-89分:良好
  • 70-79分:中等
  • 60-69分:及格
  • 60分以下:不及格

要求

  1. 成绩范围在0-100之间,输入错误时给出提示
  2. 使用if-else if-else结构实现
  3. 考虑使用switch语句的另一种实现方式

解题思路提示

  1. 先验证输入是否在有效范围内
  2. 使用整数除法将成绩除以10,简化判断逻辑
  3. 注意边界条件的处理
参考答案(点击展开)
import java.util.Scanner;

public class GradeJudgment {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.print("请输入成绩(0-100): ");
        int score = scanner.nextInt();
        
        if (score < 0 || score > 100) {
            System.out.println("错误:成绩必须在0-100之间!");
        } else {
            // 方法1:使用if-else if-else
            System.out.print("方法1判断结果: ");
            if (score >= 90) {
                System.out.println("优秀");
            } else if (score >= 80) {
                System.out.println("良好");
            } else if (score >= 70) {
                System.out.println("中等");
            } else if (score >= 60) {
                System.out.println("及格");
            } else {
                System.out.println("不及格");
            }
            
            // 方法2:使用switch(将成绩除以10简化判断)
            System.out.print("方法2判断结果: ");
            int level = score / 10;
            switch (level) {
                case 10:
                case 9:
                    System.out.println("优秀");
                    break;
                case 8:
                    System.out.println("良好");
                    break;
                case 7:
                    System.out.println("中等");
                    break;
                case 6:
                    System.out.println("及格");
                    break;
                default:
                    System.out.println("不及格");
            }
        }
        
        scanner.close();
    }
}

10.3 打印特定图形

题目描述
编写一个Java程序,根据用户输入的数字n,打印以下两种图形:

图形1:直角三角形

*
**
***
****
*****

图形2:等腰三角形

    *
   ***
  *****
 *******
*********

要求

  1. 使用嵌套循环实现
  2. 图形1使用for循环,图形2使用while循环
  3. 考虑代码的可复用性

解题思路提示

  1. 外层循环控制行数,内层循环控制每行的星号数量
  2. 等腰三角形需要先打印空格,再打印星号
  3. 空格数量 = 总行数 - 当前行数
  4. 星号数量 = 2 × 当前行数 - 1
参考答案(点击展开)
import java.util.Scanner;

public class PatternPrinter {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.print("请输入行数n: ");
        int n = scanner.nextInt();
        
        System.out.println("\n图形1:直角三角形");
        printRightTriangle(n);
        
        System.out.println("\n图形2:等腰三角形");
        printIsoscelesTriangle(n);
        
        scanner.close();
    }
    
    // 打印直角三角形(使用for循环)
    public static void printRightTriangle(int n) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
    
    // 打印等腰三角形(使用while循环)
    public static void printIsoscelesTriangle(int n) {
        int i = 1;
        while (i <= n) {
            // 打印空格
            int spaces = n - i;
            int j = 1;
            while (j <= spaces) {
                System.out.print(" ");
                j++;
            }
            
            // 打印星号
            int stars = 2 * i - 1;
            j = 1;
            while (j <= stars) {
                System.out.print("*");
                j++;
            }
            
            System.out.println();
            i++;
        }
    }
}

10.4 数字特征判断

题目描述
编写一个Java程序,实现以下功能:

  1. 判断一个整数是否是偶数
  2. 判断一个整数是否是质数(素数)
  3. 计算一个整数的各位数字之和
  4. 判断一个整数是否是回文数(正读反读都一样)

要求

  1. 每个功能封装成独立的方法
  2. 主程序提供菜单让用户选择功能
  3. 使用合适的循环和条件语句

解题思路提示

  1. 偶数判断:num % 2 == 0
  2. 质数判断:从2到√n检查是否有因数
  3. 数字求和:使用while循环和取模运算
  4. 回文数判断:将数字反转后比较
参考答案(点击展开)
import java.util.Scanner;

public class NumberFeatures {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        while (true) {
            System.out.println("\n=== 数字特征判断 ===");
            System.out.println("1. 判断偶数");
            System.out.println("2. 判断质数");
            System.out.println("3. 计算各位数字之和");
            System.out.println("4. 判断回文数");
            System.out.println("0. 退出");
            System.out.print("请选择功能(0-4): ");
            
            int choice = scanner.nextInt();
            
            if (choice == 0) {
                System.out.println("程序结束,谢谢使用!");
                break;
            }
            
            System.out.print("请输入一个整数: ");
            int num = scanner.nextInt();
            
            switch (choice) {
                case 1:
                    if (isEven(num)) {
                        System.out.println(num + " 是偶数");
                    } else {
                        System.out.println(num + " 不是偶数");
                    }
                    break;
                    
                case 2:
                    if (isPrime(num)) {
                        System.out.println(num + " 是质数");
                    } else {
                        System.out.println(num + " 不是质数");
                    }
                    break;
                    
                case 3:
                    int sum = sumOfDigits(num);
                    System.out.println(num + " 的各位数字之和为: " + sum);
                    break;
                    
                case 4:
                    if (isPalindrome(num)) {
                        System.out.println(num + " 是回文数");
                    } else {
                        System.out.println(num + " 不是回文数");
                    }
                    break;
                    
                default:
                    System.out.println("无效的选择,请重新输入!");
            }
        }
        
        scanner.close();
    }
    
    // 判断偶数
    public static boolean isEven(int num) {
        return num % 2 == 0;
    }
    
    // 判断质数
    public static boolean isPrime(int num) {
        if (num <= 1) return false;
        if (num == 2) return true;
        if (num % 2 == 0) return false;
        
        for (int i = 3; i <= Math.sqrt(num); i += 2) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }
    
    // 计算各位数字之和
    public static int sumOfDigits(int num) {
        int sum = 0;
        int temp = Math.abs(num); // 处理负数
        
        while (temp > 0) {
            sum += temp % 10;
            temp /= 10;
        }
        return sum;
    }
    
    // 判断回文数
    public static boolean isPalindrome(int num) {
        if (num < 0) return false;
        
        int original = num;
        int reversed = 0;
        
        while (num > 0) {
            int digit = num % 10;
            reversed = reversed * 10 + digit;
            num /= 10;
        }
        
        return original == reversed;
    }
}

10.5 综合应用:简易银行账户系统

题目描述
设计一个简易的银行账户管理系统,包含以下功能:

  1. 开户:创建新账户,设置初始余额
  2. 存款:向指定账户存入金额
  3. 取款:从指定账户取出金额(需检查余额是否充足)
  4. 查询余额:显示指定账户的当前余额
  5. 退出系统

要求

  1. 使用类来封装账户信息(账户号、户名、余额)
  2. 使用数组或集合管理多个账户
  3. 使用do-while循环实现主菜单
  4. 进行必要的输入验证

解题思路提示

  1. 创建BankAccount类,包含属性:accountNumberaccountNamebalance
  2. 使用ArrayList<BankAccount>存储账户列表
  3. 每个功能封装成独立的方法
  4. 取款时检查余额是否足够
参考答案(点击展开)
import java.util.ArrayList;
import java.util.Scanner;

class BankAccount {
    private String accountNumber;
    private String accountName;
    private double balance;
    
    public BankAccount(String accountNumber, String accountName, double initialBalance) {
        this.accountNumber = accountNumber;
        this.accountName = accountName;
        this.balance = initialBalance;
    }
    
    public String getAccountNumber() {
        return accountNumber;
    }
    
    public String getAccountName() {
        return accountName;
    }
    
    public double getBalance() {
        return balance;
    }
    
    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
            System.out.println("存款成功!当前余额: " + balance);
        } else {
            System.out.println("存款金额必须大于0!");
        }
    }
    
    public boolean withdraw(double amount) {
        if (amount > 0 && amount <= balance) {
            balance -= amount;
            System.out.println("取款成功!当前余额: " + balance);
            return true;
        } else if (amount > balance) {
            System.out.println("余额不足!当前余额: " + balance);
            return false;
        } else {
            System.out.println("取款金额必须大于0!");
            return false;
        }
    }
    
    public void displayInfo() {
        System.out.println("账户号: " + accountNumber);
        System.out.println("户名: " + accountName);
        System.out.println("余额: " + balance);
    }
}

public class SimpleBankSystem {
    private static ArrayList<BankAccount> accounts = new ArrayList<>();
    private static Scanner scanner = new Scanner(System.in);
    
    public static void main(String[] args) {
        int choice;
        
        do {
            System.out.println("\n=== 简易银行账户系统 ===");
            System.out.println("1. 开户");
            System.out.println("2. 存款");
            System.out.println("3. 取款");
            System.out.println("4. 查询余额");
            System.out.println("5. 显示所有账户");
            System.out.println("0. 退出");
            System.out.print("请选择操作(0-5): ");
            
            choice = scanner.nextInt();
            scanner.nextLine(); // 消耗换行符
            
            switch (choice) {
                case 1:
                    createAccount();
                    break;
                case 2:
                    deposit();
                    break;
                case 3:
                    withdraw();
                    break;
                case 4:
                    checkBalance();
                    break;
                case 5:
                    displayAllAccounts();
                    break;
                case 0:
                    System.out.println("感谢使用,再见!");
                    break;
                default:
                    System.out.println("无效的选择,请重新输入!");
            }
        } while (choice != 0);
        
        scanner.close();
    }
    
    private static void createAccount() {
        System.out.print("请输入账户号: ");
        String accountNumber = scanner.nextLine();
        
        System.out.print("请输入户名: ");
        String accountName = scanner.nextLine();
        
        System.out.print("请输入初始余额: ");
        double initialBalance = scanner.nextDouble();
        
        // 检查账户号是否已存在
        for (BankAccount account : accounts) {
            if (account.getAccountNumber().equals(accountNumber)) {
                System.out.println("账户号已存在!");
                return;
            }
        }
        
        BankAccount newAccount = new BankAccount(accountNumber, accountName, initialBalance);
        accounts.add(newAccount);
        System.out.println("开户成功!");
        newAccount.displayInfo();
    }
    
    private static BankAccount findAccount(String accountNumber) {
        for (BankAccount account : accounts) {
            if (account.getAccountNumber().equals(accountNumber)) {
                return account;
            }
        }
        return null;
    }
    
    private static void deposit() {
        System.out.print("请输入账户号: ");
        String accountNumber = scanner.nextLine();
        
        BankAccount account = findAccount(accountNumber);
        if (account == null) {
            System.out.println("账户不存在!");
            return;
        }
        
        System.out.print("请输入存款金额: ");
        double amount = scanner.nextDouble();
        scanner.nextLine(); // 消耗换行符
        
        account.deposit(amount);
    }
    
    private static void withdraw() {
        System.out.print("请输入账户号: ");
        String accountNumber = scanner.nextLine();
        
        BankAccount account = findAccount(accountNumber);
        if (account == null) {
            System.out.println("账户不存在!");
            return;
        }
        
        System.out.print("请输入取款金额: ");
        double amount = scanner.nextDouble();
        scanner.nextLine(); // 消耗换行符
        
        account.withdraw(amount);
    }
    
    private static void checkBalance() {
        System.out.print("请输入账户号: ");
        String accountNumber = scanner.nextLine();
        
        BankAccount account = findAccount(accountNumber);
        if (account == null) {
            System.out.println("账户不存在!");
            return;
        }
        
        account.displayInfo();
    }
    
    private static void displayAllAccounts() {
        if (accounts.isEmpty()) {
            System.out.println("暂无账户信息!");
            return;
        }
        
        System.out.println("\n=== 所有账户信息 ===");
        for (BankAccount account : accounts) {
            account.displayInfo();
            System.out.println("-------------------");
        }
    }
}

练习建议

  1. 独立完成:先尝试自己编写代码,不要直接查看答案
  2. 逐步调试:遇到问题时,使用调试工具逐步执行代码
  3. 扩展练习:在完成基础功能后,尝试添加新功能或优化代码
  4. 代码重构:思考如何让代码更简洁、可读性更好
  5. 错误处理:为程序添加更完善的输入验证和错误处理

通过完成这些练习题,你将巩固Java基础语法,并培养解决实际问题的能力。每道题都涵盖了多个核心知识点,建议反复练习直到熟练掌握。

更多推荐