Java学习第1天 - 完整版基础语法

学习时间: 4-5小时
学习目标: 深入掌握Java基本语法,建立扎实的编程基础


📋 详细学习清单

✅ 第一部分:开发环境详细配置 (45分钟)

1. JDK安装与配置详解

什么是JDK?

scss 复制代码
JDK (Java Development Kit) = JRE + 开发工具
├── JRE (Java Runtime Environment) - 运行Java程序
│   ├── JVM (Java Virtual Machine) - Java虚拟机
│   └── Java类库
└── 开发工具
    ├── javac - 编译器
    ├── java - 运行器
    ├── jar - 打包工具
    └── javadoc - 文档生成工具

安装步骤:

bash 复制代码
# 1. 下载JDK 17 (LTS版本,推荐)
# Oracle JDK: https://oracle.com/java/technologies/downloads/
# OpenJDK: https://adoptium.net/

# 2. 配置环境变量 (Windows)
JAVA_HOME = C:\Program Files\Java\jdk-17
PATH += %JAVA_HOME%\bin

# 3. 验证安装
java -version
javac -version

💡 验证练习:

bash 复制代码
# 应该看到类似输出
java version "17.0.8" 2023-07-18 LTS
Java(TM) SE Runtime Environment (build 17.0.8+9-LTS-211)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.8+9-LTS-211, mixed mode)

2. IDE安装配置

IntelliJ IDEA Community安装:

markdown 复制代码
1. 下载:https://jetbrains.com/idea/download/
2. 安装并启动
3. 创建新项目:File → New → Project
4. 选择:Java → Project SDK (选择JDK 17)
5. 项目名称:JavaLearningDay1

3. 第一个Java程序

创建HelloWorld.java:

java 复制代码
// 这是我的第一个Java程序
public class HelloWorld {
    // main方法是程序入口点
    public static void main(String[] args) {
        // 输出文本到控制台
        System.out.println("Hello, Java World!");
        System.out.println("我开始学习Java了!");
        
        // 这是单行注释
        /* 
         * 这是多行注释
         * 可以写多行说明
         */
    }
}

编译运行:

bash 复制代码
# 方法1:命令行
javac HelloWorld.java  # 编译生成HelloWorld.class
java HelloWorld        # 运行

# 方法2:IDEA中
# 右键 → Run 'HelloWorld.main()'
# 或按 Shift + F10

✅ 第二部分:Java语法对比学习 (75分钟)

1. 变量声明对比

JavaScript (你熟悉的)

javascript 复制代码
// 变量声明 - 弱类型
let name = "张三";
const age = 25;
let isStudent = true;
let salary = 5000.5;

// 可以随时改变类型
let data = "hello";
data = 123;        // 允许
data = true;       // 允许
data = [1,2,3];    // 允许

Java (今天学习的)

java 复制代码
// 变量声明 - 强类型
public class VariableExample {
    public static void main(String[] args) {
        // 基本数据类型
        String name = "张三";        // 字符串
        int age = 25;               // 整数
        boolean isStudent = true;   // 布尔值
        double salary = 5000.5;     // 浮点数
        
        // 一旦声明类型,不能改变
        // age = "二十五";  // 错误!不能将字符串赋值给int
        // isStudent = 1;   // 错误!不能将数字赋值给boolean
        
        System.out.println("姓名:" + name);
        System.out.println("年龄:" + age);
        System.out.println("是学生:" + isStudent);
        System.out.println("薪水:" + salary);
    }
}

2. 数据类型详解

基本数据类型:

java 复制代码
public class DataTypes {
    public static void main(String[] args) {
        // 整数类型
        byte smallNumber = 127;         // 8位,-128到127
        short mediumNumber = 32767;     // 16位,-32768到32767
        int normalNumber = 2147483647;  // 32位,约-21亿到21亿
        long bigNumber = 9223372036854775807L; // 64位,超大数字

        // 浮点类型
        float price = 99.99f;           // 32位,单精度
        double precisePrice = 99.999999999; // 64位,双精度

        // 字符类型
        char grade = 'A';               // 16位,单个字符
        char chineseChar = '中';        // 支持中文字符

        // 布尔类型
        boolean isPassed = true;        // 只能是true或false
        boolean isFailed = false;

        // 输出所有类型
        System.out.println("=== 整数类型 ===");
        System.out.println("byte: " + smallNumber);
        System.out.println("short: " + mediumNumber);
        System.out.println("int: " + normalNumber);
        System.out.println("long: " + bigNumber);

        System.out.println("\n=== 浮点类型 ===");
        System.out.println("float: " + price);
        System.out.println("double: " + precisePrice);

        System.out.println("\n=== 字符和布尔 ===");
        System.out.println("char: " + grade);
        System.out.println("中文字符: " + chineseChar);
        System.out.println("boolean: " + isPassed);
    }
}

引用数据类型:

java 复制代码
public class ReferenceTypes {
    public static void main(String[] args) {
        // 字符串 - 最常用的引用类型
        String message = "Hello Java";
        String name = "李明";
        String empty = "";              // 空字符串
        String nullString = null;       // null值

        // 字符串操作
        System.out.println("原字符串: " + message);
        System.out.println("长度: " + message.length());
        System.out.println("转大写: " + message.toUpperCase());
        System.out.println("转小写: " + message.toLowerCase());
        System.out.println("包含Java: " + message.contains("Java"));

        // 字符串拼接
        String greeting = "你好, " + name + "!";
        System.out.println(greeting);

        // 数组 - 引用类型
        int[] numbers = {1, 2, 3, 4, 5};
        String[] names = {"张三", "李四", "王五"};

        System.out.println("数组长度: " + numbers.length);
        System.out.println("第一个数字: " + numbers[0]);
        System.out.println("第一个姓名: " + names[0]);
    }
}

3. 变量命名规则

命名规范对比:

javascript 复制代码
// JavaScript 命名 (你熟悉的)
let userName = "张三";          // 驼峰命名
let user_age = 25;             // 下划线也可以
let UserInfo = {};             // 大写开头(类名)
const MAX_SIZE = 100;          // 常量全大写
java 复制代码
// Java 命名规范
public class NamingRules {
    // 常量:全大写,下划线分隔
    public static final int MAX_SIZE = 100;
    public static final String DEFAULT_NAME = "未知";
    
    public static void main(String[] args) {
        // 变量:驼峰命名,首字母小写
        String userName = "张三";
        int userAge = 25;
        boolean isActive = true;
        double accountBalance = 1000.50;
        
        // 不推荐的命名
        // String user_name = "张三";  // 不符合Java规范
        // int 2age = 25;             // 不能以数字开头
        // String class = "A";        // 不能使用关键字
        
        System.out.println("用户名: " + userName);
        System.out.println("年龄: " + userAge);
        System.out.println("最大值: " + MAX_SIZE);
    }
}

✅ 第三部分:运算符详解 (60分钟)

1. 算术运算符

java 复制代码
public class ArithmeticOperators {
    public static void main(String[] args) {
        int a = 10;
        int b = 3;
        
        System.out.println("=== 基本算术运算 ===");
        System.out.println("a = " + a + ", b = " + b);
        System.out.println("加法: " + a + " + " + b + " = " + (a + b));
        System.out.println("减法: " + a + " - " + b + " = " + (a - b));
        System.out.println("乘法: " + a + " * " + b + " = " + (a * b));
        System.out.println("除法: " + a + " / " + b + " = " + (a / b));     // 整数除法
        System.out.println("取余: " + a + " % " + b + " = " + (a % b));
        
        System.out.println("\n=== 浮点除法 ===");
        double da = 10.0;
        double db = 3.0;
        System.out.println("浮点除法: " + da + " / " + db + " = " + (da / db));
        
        System.out.println("\n=== 自增自减 ===");
        int count = 5;
        System.out.println("原值: " + count);
        System.out.println("后自增 count++: " + (count++)); // 先使用再加1
        System.out.println("现在的值: " + count);
        System.out.println("前自增 ++count: " + (++count)); // 先加1再使用
        System.out.println("后自减 count--: " + (count--)); // 先使用再减1
        System.out.println("前自减 --count: " + (--count)); // 先减1再使用
    }
}

2. 比较和逻辑运算符

java 复制代码
public class ComparisonOperators {
    public static void main(String[] args) {
        int score1 = 85;
        int score2 = 92;
        boolean isVip = true;
        boolean isStudent = false;
        
        System.out.println("=== 比较运算符 ===");
        System.out.println(score1 + " > " + score2 + " = " + (score1 > score2));
        System.out.println(score1 + " < " + score2 + " = " + (score1 < score2));
        System.out.println(score1 + " >= " + score2 + " = " + (score1 >= score2));
        System.out.println(score1 + " <= " + score2 + " = " + (score1 <= score2));
        System.out.println(score1 + " == " + score2 + " = " + (score1 == score2));
        System.out.println(score1 + " != " + score2 + " = " + (score1 != score2));
        
        System.out.println("\n=== 逻辑运算符 ===");
        System.out.println("isVip = " + isVip + ", isStudent = " + isStudent);
        System.out.println("&&(与): " + isVip + " && " + isStudent + " = " + (isVip && isStudent));
        System.out.println("||(或): " + isVip + " || " + isStudent + " = " + (isVip || isStudent));
        System.out.println("!(非): !" + isVip + " = " + (!isVip));
        
        System.out.println("\n=== 实际应用例子 ===");
        int age = 20;
        boolean hasLicense = true;
        boolean canDrive = age >= 18 && hasLicense;
        System.out.println("年龄" + age + "岁,有驾照: " + hasLicense);
        System.out.println("可以开车: " + canDrive);
        
        int testScore = 78;
        boolean isPassed = testScore >= 60;
        boolean isExcellent = testScore >= 90;
        System.out.println("考试成绩: " + testScore);
        System.out.println("是否及格: " + isPassed);
        System.out.println("是否优秀: " + isExcellent);
    }
}

3. 赋值运算符

java 复制代码
public class AssignmentOperators {
    public static void main(String[] args) {
        int number = 10;
        System.out.println("初始值: " + number);
        
        System.out.println("=== 复合赋值运算符 ===");
        number += 5;  // 等同于 number = number + 5;
        System.out.println("number += 5 结果: " + number);
        
        number -= 3;  // 等同于 number = number - 3;
        System.out.println("number -= 3 结果: " + number);
        
        number *= 2;  // 等同于 number = number * 2;
        System.out.println("number *= 2 结果: " + number);
        
        number /= 4;  // 等同于 number = number / 4;
        System.out.println("number /= 4 结果: " + number);
        
        number %= 3;  // 等同于 number = number % 3;
        System.out.println("number %= 3 结果: " + number);
        
        System.out.println("\n=== 实际应用:银行存款 ===");
        double balance = 1000.0;
        System.out.println("初始余额: ¥" + balance);
        
        balance += 500;  // 存款
        System.out.println("存款500后: ¥" + balance);
        
        balance -= 200;  // 取款
        System.out.println("取款200后: ¥" + balance);
        
        balance *= 1.03; // 利息3%
        System.out.println("加息后: ¥" + String.format("%.2f", balance));
    }
}

✅ 第四部分:控制流程 (90分钟)

1. if条件语句

JavaScript对比:

javascript 复制代码
// JavaScript条件语句
let score = 85;
if (score >= 90) {
    console.log("优秀");
} else if (score >= 80) {
    console.log("良好");
} else if (score >= 60) {
    console.log("及格");
} else {
    console.log("不及格");
}

Java实现:

java 复制代码
public class IfStatements {
    public static void main(String[] args) {
        // 基本if语句
        int score = 85;
        
        System.out.println("=== 成绩等级判断 ===");
        if (score >= 90) {
            System.out.println("优秀!继续保持!");
        } else if (score >= 80) {
            System.out.println("良好!再努力一点就优秀了!");
        } else if (score >= 60) {
            System.out.println("及格了,但还需要加油!");
        } else {
            System.out.println("不及格,需要补考!");
        }
        
        System.out.println("\n=== 多条件判断 ===");
        int age = 20;
        boolean hasTicket = true;
        boolean hasId = true;
        
        if (age >= 18 && hasTicket && hasId) {
            System.out.println("可以进入影院观看电影");
        } else if (age < 18) {
            System.out.println("未成年,需要家长陪同");
        } else if (!hasTicket) {
            System.out.println("请先购买电影票");
        } else if (!hasId) {
            System.out.println("请出示身份证件");
        }
        
        System.out.println("\n=== 嵌套if语句 ===");
        String weather = "sunny";
        int temperature = 25;
        
        if (weather.equals("sunny")) {
            if (temperature >= 20 && temperature <= 30) {
                System.out.println("天气很好,适合出游!");
            } else if (temperature > 30) {
                System.out.println("天气晴朗但太热了,注意防晒!");
            } else {
                System.out.println("天气晴朗但有点冷,多穿点!");
            }
        } else if (weather.equals("rainy")) {
            System.out.println("下雨天,带好雨伞!");
        } else {
            System.out.println("天气情况未知");
        }
        
        System.out.println("\n=== 三元运算符 ===");
        int num1 = 15;
        int num2 = 20;
        int max = (num1 > num2) ? num1 : num2;  // 类似JS的三元运算符
        System.out.println(num1 + "和" + num2 + "中较大的是: " + max);
        
        String result = (score >= 60) ? "及格" : "不及格";
        System.out.println("考试结果: " + result);
    }
}

2. switch语句

java 复制代码
public class SwitchStatements {
    public static void main(String[] args) {
        System.out.println("=== 星期判断 ===");
        int dayOfWeek = 3;
        
        switch (dayOfWeek) {
            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("无效的星期数");
        }
        
        System.out.println("\n=== 成绩等级 ===");
        char grade = 'B';
        
        switch (grade) {
            case 'A':
                System.out.println("优秀!奖励100元!");
                break;
            case 'B':
                System.out.println("良好!奖励50元!");
                break;
            case 'C':
                System.out.println("一般,继续努力!");
                break;
            case 'D':
                System.out.println("不及格,需要补习!");
                break;
            default:
                System.out.println("无效的成绩等级");
        }
        
        System.out.println("\n=== 季节判断 ===");
        int month = 8;
        String season;
        
        switch (month) {
            case 12:
            case 1:
            case 2:
                season = "冬季";
                break;
            case 3:
            case 4:
            case 5:
                season = "春季";
                break;
            case 6:
            case 7:
            case 8:
                season = "夏季";
                break;
            case 9:
            case 10:
            case 11:
                season = "秋季";
                break;
            default:
                season = "无效月份";
        }
        
        System.out.println(month + "月属于" + season);
        
        System.out.println("\n=== 计算器示例 ===");
        int a = 10;
        int b = 5;
        char operator = '+';
        int result;
        
        switch (operator) {
            case '+':
                result = a + b;
                System.out.println(a + " + " + b + " = " + result);
                break;
            case '-':
                result = a - b;
                System.out.println(a + " - " + b + " = " + result);
                break;
            case '*':
                result = a * b;
                System.out.println(a + " * " + b + " = " + result);
                break;
            case '/':
                if (b != 0) {
                    result = a / b;
                    System.out.println(a + " / " + b + " = " + result);
                } else {
                    System.out.println("除数不能为0!");
                }
                break;
            default:
                System.out.println("不支持的运算符: " + operator);
        }
    }
}

3. 循环语句

java 复制代码
public class LoopStatements {
    public static void main(String[] args) {
        System.out.println("=== for循环 ===");
        
        // 基本for循环
        System.out.println("数字1到10:");
        for (int i = 1; i <= 10; i++) {
            System.out.print(i + " ");
        }
        System.out.println();
        
        // 偶数输出
        System.out.println("1到20的偶数:");
        for (int i = 2; i <= 20; i += 2) {
            System.out.print(i + " ");
        }
        System.out.println();
        
        // 倒序输出
        System.out.println("10到1倒序:");
        for (int i = 10; i >= 1; i--) {
            System.out.print(i + " ");
        }
        System.out.println();
        
        System.out.println("\n=== while循环 ===");
        
        // 基本while循环
        int count = 1;
        System.out.println("while循环输出1到5:");
        while (count <= 5) {
            System.out.print(count + " ");
            count++;
        }
        System.out.println();
        
        // 累加计算
        int sum = 0;
        int num = 1;
        while (num <= 100) {
            sum += num;
            num++;
        }
        System.out.println("1到100的和: " + sum);
        
        System.out.println("\n=== do-while循环 ===");
        
        // do-while至少执行一次
        int value = 10;
        do {
            System.out.println("执行一次,value = " + value);
            value--;
        } while (value > 10); // 条件为false,但仍执行了一次
        
        System.out.println("\n=== 嵌套循环 ===");
        
        // 乘法表
        System.out.println("九九乘法表:");
        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(); // 换行
        }
        
        System.out.println("\n=== break和continue ===");
        
        // break示例
        System.out.println("找到第一个能被7整除的数:");
        for (int i = 1; i <= 50; i++) {
            if (i % 7 == 0) {
                System.out.println("找到了: " + i);
                break; // 找到后立即退出循环
            }
        }
        
        // continue示例
        System.out.println("输出1到20中不能被3整除的数:");
        for (int i = 1; i <= 20; i++) {
            if (i % 3 == 0) {
                continue; // 跳过这次循环,继续下一次
            }
            System.out.print(i + " ");
        }
        System.out.println();
    }
}

✅ 第五部分:数组基础 (75分钟)

1. 数组的声明和初始化

java 复制代码
public class ArrayBasics {
    public static void main(String[] args) {
        System.out.println("=== 数组声明和初始化 ===");
        
        // 方法1:声明后赋值
        int[] numbers = new int[5];  // 创建长度为5的整数数组
        numbers[0] = 10;
        numbers[1] = 20;
        numbers[2] = 30;
        numbers[3] = 40;
        numbers[4] = 50;
        
        // 方法2:声明时直接初始化
        String[] names = {"张三", "李四", "王五", "赵六"};
        
        // 方法3:使用new关键字初始化
        double[] scores = new double[]{85.5, 92.0, 78.5, 88.0, 95.5};
        
        // 方法4:另一种声明方式(不推荐)
        int ages[] = {18, 19, 20, 21, 22};
        
        System.out.println("数组长度:");
        System.out.println("numbers数组长度: " + numbers.length);
        System.out.println("names数组长度: " + names.length);
        System.out.println("scores数组长度: " + scores.length);
        
        System.out.println("\n=== 访问数组元素 ===");
        System.out.println("第一个数字: " + numbers[0]);
        System.out.println("最后一个名字: " + names[names.length - 1]);
        System.out.println("第三个分数: " + scores[2]);
        
        // 修改数组元素
        numbers[2] = 35; // 将第3个元素从30改为35
        System.out.println("修改后第三个数字: " + numbers[2]);
    }
}

2. 数组的遍历

java 复制代码
public class ArrayTraversal {
    public static void main(String[] args) {
        int[] numbers = {12, 45, 78, 23, 56, 89, 34};
        String[] cities = {"北京", "上海", "广州", "深圳", "杭州"};
        
        System.out.println("=== 使用普通for循环遍历 ===");
        System.out.print("数字数组: ");
        for (int i = 0; i < numbers.length; i++) {
            System.out.print(numbers[i] + " ");
        }
        System.out.println();
        
        System.out.print("城市数组: ");
        for (int i = 0; i < cities.length; i++) {
            System.out.print(cities[i] + " ");
        }
        System.out.println();
        
        System.out.println("\n=== 使用增强for循环遍历 ===");
        System.out.print("数字数组: ");
        for (int num : numbers) {  // 增强for循环,类似JS的for...of
            System.out.print(num + " ");
        }
        System.out.println();
        
        System.out.print("城市数组: ");
        for (String city : cities) {
            System.out.print(city + " ");
        }
        System.out.println();
        
        System.out.println("\n=== 倒序遍历 ===");
        System.out.print("倒序数字: ");
        for (int i = numbers.length - 1; i >= 0; i--) {
            System.out.print(numbers[i] + " ");
        }
        System.out.println();
        
        System.out.println("\n=== 带索引的遍历 ===");
        for (int i = 0; i < cities.length; i++) {
            System.out.println("索引" + i + ": " + cities[i]);
        }
    }
}

3. 数组的常用操作

java 复制代码
public class ArrayOperations {
    public static void main(String[] args) {
        int[] scores = {85, 92, 78, 96, 88, 73, 89, 95};
        
        System.out.println("=== 数组统计操作 ===");
        
        // 计算总分
        int sum = 0;
        for (int score : scores) {
            sum += score;
        }
        System.out.println("总分: " + sum);
        
        // 计算平均分
        double average = (double) sum / scores.length;
        System.out.println("平均分: " + String.format("%.2f", average));
        
        // 找最高分
        int max = scores[0];
        for (int score : scores) {
            if (score > max) {
                max = score;
            }
        }
        System.out.println("最高分: " + max);
        
        // 找最低分
        int min = scores[0];
        for (int score : scores) {
            if (score < min) {
                min = score;
            }
        }
        System.out.println("最低分: " + min);
        
        // 统计及格人数
        int passCount = 0;
        for (int score : scores) {
            if (score >= 60) {
                passCount++;
            }
        }
        System.out.println("及格人数: " + passCount);
        System.out.println("及格率: " + String.format("%.1f%%", 
                          (double) passCount / scores.length * 100));
        
        System.out.println("\n=== 数组查找 ===");
        
        // 查找特定值
        int target = 88;
        int index = -1;
        for (int i = 0; i < scores.length; i++) {
            if (scores[i] == target) {
                index = i;
                break;
            }
        }
        
        if (index != -1) {
            System.out.println("分数" + target + "在索引" + index + "位置");
        } else {
            System.out.println("没有找到分数" + target);
        }
        
        System.out.println("\n=== 数组排序(冒泡排序) ===");
        int[] numbersToSort = {64, 34, 25, 12, 22, 11, 90};
        
        System.out.print("排序前: ");
        for (int num : numbersToSort) {
            System.out.print(num + " ");
        }
        System.out.println();
        
        // 冒泡排序
        for (int i = 0; i < numbersToSort.length - 1; i++) {
            for (int j = 0; j < numbersToSort.length - 1 - i; j++) {
                if (numbersToSort[j] > numbersToSort[j + 1]) {
                    // 交换元素
                    int temp = numbersToSort[j];
                    numbersToSort[j] = numbersToSort[j + 1];
                    numbersToSort[j + 1] = temp;
                }
            }
        }
        
        System.out.print("排序后: ");
        for (int num : numbersToSort) {
            System.out.print(num + " ");
        }
        System.out.println();
    }
}

✅ 第六部分:综合实战练习 (60分钟)

1. 学生成绩管理系统

java 复制代码
public class StudentGradeSystem {
    public static void main(String[] args) {
        // 学生姓名和成绩
        String[] studentNames = {"张三", "李四", "王五", "赵六", "孙七"};
        int[][] grades = {
            {85, 92, 78},  // 张三:语文85,数学92,英语78
            {76, 88, 91},  // 李四:语文76,数学88,英语91
            {92, 85, 89},  // 王五:语文92,数学85,英语89
            {68, 73, 82},  // 赵六:语文68,数学73,英语82
            {89, 95, 87}   // 孙七:语文89,数学95,英语87
        };
        String[] subjects = {"语文", "数学", "英语"};
        
        System.out.println("=== 学生成绩表 ===");
        System.out.println("姓名\t语文\t数学\t英语\t总分\t平均分");
        System.out.println("----------------------------------------");
        
        // 显示每个学生的成绩
        for (int i = 0; i < studentNames.length; i++) {
            int total = 0;
            System.out.print(studentNames[i] + "\t");
            
            // 显示各科成绩并计算总分
            for (int j = 0; j < grades[i].length; j++) {
                System.out.print(grades[i][j] + "\t");
                total += grades[i][j];
            }
            
            double average = (double) total / grades[i].length;
            System.out.println(total + "\t" + String.format("%.1f", average));
        }
        
        System.out.println("\n=== 各科平均分 ===");
        for (int j = 0; j < subjects.length; j++) {
            int subjectTotal = 0;
            for (int i = 0; i < studentNames.length; i++) {
                subjectTotal += grades[i][j];
            }
            double subjectAverage = (double) subjectTotal / studentNames.length;
            System.out.println(subjects[j] + "平均分: " + String.format("%.1f", subjectAverage));
        }
        
        System.out.println("\n=== 最高分学生 ===");
        for (int j = 0; j < subjects.length; j++) {
            int maxScore = grades[0][j];
            String topStudent = studentNames[0];
            
            for (int i = 1; i < studentNames.length; i++) {
                if (grades[i][j] > maxScore) {
                    maxScore = grades[i][j];
                    topStudent = studentNames[i];
                }
            }
            System.out.println(subjects[j] + "最高分: " + topStudent + " " + maxScore + "分");
        }
        
        System.out.println("\n=== 总分排名 ===");
        // 计算每个学生的总分
        int[] totalScores = new int[studentNames.length];
        for (int i = 0; i < studentNames.length; i++) {
            for (int j = 0; j < grades[i].length; j++) {
                totalScores[i] += grades[i][j];
            }
        }
        
        // 简单排序显示前三名
        for (int rank = 1; rank <= 3; rank++) {
            int maxTotal = -1;
            int maxIndex = -1;
            
            for (int i = 0; i < totalScores.length; i++) {
                if (totalScores[i] > maxTotal) {
                    maxTotal = totalScores[i];
                    maxIndex = i;
                }
            }
            
            if (maxIndex != -1) {
                System.out.println("第" + rank + "名: " + studentNames[maxIndex] + 
                                 " 总分" + maxTotal + "分");
                totalScores[maxIndex] = -1; // 标记已排过
            }
        }
    }
}

2. 简单的彩票号码生成器

java 复制代码
public class LotteryGenerator {
    public static void main(String[] args) {
        System.out.println("=== 双色球号码生成器 ===");
        
        // 生成红球号码(1-33中选6个不重复)
        int[] redBalls = new int[6];
        boolean[] used = new boolean[34]; // 索引0不用,1-33对应号码
        
        for (int i = 0; i < 6; i++) {
            int number;
            do {
                number = (int)(Math.random() * 33) + 1; // 1-33随机数
            } while (used[number]); // 如果已经选过,重新生成
            
            redBalls[i] = number;
            used[number] = true;
        }
        
        // 对红球排序
        for (int i = 0; i < redBalls.length - 1; i++) {
            for (int j = 0; j < redBalls.length - 1 - i; j++) {
                if (redBalls[j] > redBalls[j + 1]) {
                    int temp = redBalls[j];
                    redBalls[j] = redBalls[j + 1];
                    redBalls[j + 1] = temp;
                }
            }
        }
        
        // 生成蓝球号码(1-16中选1个)
        int blueBall = (int)(Math.random() * 16) + 1;
        
        // 显示结果
        System.out.print("红球: ");
        for (int i = 0; i < redBalls.length; i++) {
            System.out.printf("%02d ", redBalls[i]);
        }
        System.out.println("| 蓝球: " + String.format("%02d", blueBall));
        
        System.out.println("\n=== 生成5注号码 ===");
        for (int round = 1; round <= 5; round++) {
            System.out.print("第" + round + "注: ");
            
            // 生成红球
            boolean[] roundUsed = new boolean[34];
            int[] roundReds = new int[6];
            
            for (int i = 0; i < 6; i++) {
                int number;
                do {
                    number = (int)(Math.random() * 33) + 1;
                } while (roundUsed[number]);
                
                roundReds[i] = number;
                roundUsed[number] = true;
            }
            
            // 排序
            for (int i = 0; i < roundReds.length - 1; i++) {
                for (int j = 0; j < roundReds.length - 1 - i; j++) {
                    if (roundReds[j] > roundReds[j + 1]) {
                        int temp = roundReds[j];
                        roundReds[j] = roundReds[j + 1];
                        roundReds[j + 1] = temp;
                    }
                }
            }
            
            // 显示红球
            for (int red : roundReds) {
                System.out.printf("%02d ", red);
            }
            
            // 蓝球
            int roundBlue = (int)(Math.random() * 16) + 1;
            System.out.println("| " + String.format("%02d", roundBlue));
        }
    }
}

3. 数字游戏:猜数字

java 复制代码
// NumberGuessingGame.java
public class NumberGuessingGame {
    public static void main(String[] args) {
        System.out.println("=== 猜数字游戏 ===");
        System.out.println("游戏规则:猜一个1-100之间的数字");
        
        // 生成随机数
        int secretNumber = (int)(Math.random() * 100) + 1;
        
        // 模拟用户猜测(实际应用中会从键盘输入)
        int[] userGuesses = {50, 75, 63, 69, 66, 68, 67}; // 假设用户的猜测
        int attempts = 0;
        boolean found = false;
        
        System.out.println("神秘数字已生成(1-100)");
        System.out.println("开始猜测...\n");
        
        for (int guess : userGuesses) {
            attempts++;
            System.out.println("第" + attempts + "次猜测: " + guess);
            
            if (guess == secretNumber) {
                System.out.println("🎉 恭喜你!猜对了!");
                System.out.println("神秘数字就是: " + secretNumber);
                System.out.println("你用了" + attempts + "次就猜中了!");
                found = true;
                break;
            } else if (guess < secretNumber) {
                System.out.println("太小了!再大一点");
            } else {
                System.out.println("太大了!再小一点");
            }
            
            // 给出范围提示
            if (attempts >= 3) {
                if (guess < secretNumber) {
                    System.out.println("提示:数字在 " + (guess + 1) + " 到 100 之间");
                } else {
                    System.out.println("提示:数字在 1 到 " + (guess - 1) + " 之间");
                }
            }
            System.out.println();
        }
        
        if (!found) {
            System.out.println("很遗憾,没有猜中!");
            System.out.println("神秘数字是: " + secretNumber);
        }
        
        // 评价游戏表现
        System.out.println("\n=== 游戏评价 ===");
        if (found) {
            if (attempts <= 3) {
                System.out.println("表现:优秀!你是猜数字高手!");
            } else if (attempts <= 5) {
                System.out.println("表现:良好!继续保持!");
            } else {
                System.out.println("表现:一般,多练习会更好!");
            }
        } else {
            System.out.println("表现:需要改进,建议使用二分查找策略!");
        }
        
        System.out.println("\n=== 统计信息 ===");
        System.out.println("总尝试次数: " + attempts);
        System.out.println("成功率: " + (found ? "100%" : "0%"));
        
        // 显示猜测历史
        System.out.println("\n=== 猜测历史 ===");
        for (int i = 0; i < attempts && i < userGuesses.length; i++) {
            String result;
            if (userGuesses[i] == secretNumber) {
                result = "✓ 正确!";
            } else if (userGuesses[i] < secretNumber) {
                result = "↑ 太小";
            } else {
                result = "↓ 太大";
            }
            System.out.println("第" + (i + 1) + "次: " + userGuesses[i] + " - " + result);
        }
        
        // 演示最优策略(二分查找)
        System.out.println("\n=== 最优策略演示 ===");
        System.out.println("使用二分查找法猜测数字 " + secretNumber + ":");
        
        int low = 1, high = 100;
        int optimalAttempts = 0;
        
        while (low <= high) {
            optimalAttempts++;
            int mid = (low + high) / 2;
            System.out.print("第" + optimalAttempts + "次最优猜测: " + mid);
            
            if (mid == secretNumber) {
                System.out.println(" - 正确!");
                break;
            } else if (mid < secretNumber) {
                System.out.println(" - 太小,范围缩小到 " + (mid + 1) + "-" + high);
                low = mid + 1;
            } else {
                System.out.println(" - 太大,范围缩小到 " + low + "-" + (mid - 1));
                high = mid - 1;
            }
        }
        
        System.out.println("最优策略只需要 " + optimalAttempts + " 次就能猜中!");
        
        // 额外游戏:多轮猜数字
        System.out.println("\n=== 连续3轮游戏 ===");
        int totalScore = 0;
        
        for (int round = 1; round <= 3; round++) {
            System.out.println("\n--- 第" + round + "轮 ---");
            int roundSecret = (int)(Math.random() * 50) + 1; // 1-50范围
            int[] roundGuesses = {
                (int)(Math.random() * 50) + 1,
                (int)(Math.random() * 50) + 1,
                (int)(Math.random() * 50) + 1,
                (int)(Math.random() * 50) + 1,
                (int)(Math.random() * 50) + 1
            };
            
            boolean roundWon = false;
            int roundAttempts = 0;
            
            for (int guess : roundGuesses) {
                roundAttempts++;
                System.out.println("猜测: " + guess);
                
                if (guess == roundSecret) {
                    System.out.println("猜中了!神秘数字是 " + roundSecret);
                    int score = Math.max(0, 60 - (roundAttempts - 1) * 10); // 基础分60,每多一次扣10分
                    System.out.println("本轮得分: " + score);
                    totalScore += score;
                    roundWon = true;
                    break;
                } else if (guess < roundSecret) {
                    System.out.println("太小了");
                } else {
                    System.out.println("太大了");
                }
            }
            
            if (!roundWon) {
                System.out.println("本轮失败!神秘数字是 " + roundSecret);
                System.out.println("本轮得分: 0");
            }
        }
        
        System.out.println("\n=== 最终成绩 ===");
        System.out.println("总得分: " + totalScore + "/180");
        double percentage = (double) totalScore / 180 * 100;
        System.out.println("正确率: " + String.format("%.1f%%", percentage));
        
        if (percentage >= 80) {
            System.out.println("等级: 🏆 大师级");
        } else if (percentage >= 60) {
            System.out.println("等级: 🥈 高手级");
        } else if (percentage >= 40) {
            System.out.println("等级: 🥉 熟练级");
        } else {
            System.out.println("等级: 📚 练习级");
        }
        
        System.out.println("\n游戏结束!感谢参与!");
    }
}
makefile 复制代码
=== 猜数字游戏 ===
游戏规则:猜一个1-100之间的数字
神秘数字已生成(1-100)
开始猜测...

第1次猜测: 50
太小了!再大一点

第2次猜测: 75
太大了!再小一点

第3次猜测: 63
太小了!再大一点
提示:数字在 64 到 74 之间

第4次猜测: 69
太大了!再小一点
提示:数字在 64 到 68 之间

第5次猜测: 66
太小了!再大一点
提示:数字在 67 到 68 之间

第6次猜测: 68
太大了!再小一点
提示:数字在 67 到 67 之间

第7次猜测: 67
🎉 恭喜你!猜对了!
神秘数字就是: 67
你用了7次就猜中了!

=== 游戏评价 ===
表现:一般,多练习会更好!

=== 统计信息 ===
总尝试次数: 7
成功率: 100%

4. 数学算法练习:斐波那契数列与水仙花数

java 复制代码
// MathExercises.java
public class MathExercises {
    public static void main(String[] args) {
        System.out.println("=== 数学算法练习 ===");
        
        // 4. 斐波那契数列
        System.out.println("=== 斐波那契数列前10项 ===");
        System.out.println("说明:从第3项开始,每一项都是前两项的和");
        
        int first = 0, second = 1;
        System.out.print("斐波那契数列: " + first + " " + second + " ");
        
        for (int i = 2; i < 10; i++) {
            int next = first + second;
            System.out.print(next + " ");
            first = second;
            second = next;
        }
        System.out.println();
        
        // 显示计算过程
        System.out.println("\n计算过程展示:");
        int a = 0, b = 1;
        System.out.println("第1项: " + a);
        System.out.println("第2项: " + b);
        
        for (int i = 3; i <= 10; i++) {
            int c = a + b;
            System.out.println("第" + i + "项: " + a + " + " + b + " = " + c);
            a = b;
            b = c;
        }
        
        // 5. 水仙花数
        System.out.println("\n=== 三位水仙花数 ===");
        System.out.println("说明:水仙花数是指一个三位数,其各位数字立方和等于该数本身");
        System.out.println("例如:153 = 1³ + 5³ + 3³ = 1 + 125 + 27 = 153");
        
        System.out.println("\n查找100-999之间的所有水仙花数:");
        int count = 0;
        
        for (int num = 100; num <= 999; num++) {
            int hundreds = num / 100;        // 百位数字
            int tens = (num / 10) % 10;      // 十位数字
            int units = num % 10;            // 个位数字
            
            // 计算各位数字的立方和
            int sumOfCubes = hundreds * hundreds * hundreds +
                           tens * tens * tens +
                           units * units * units;
            
            if (sumOfCubes == num) {
                count++;
                System.out.println("第" + count + "个水仙花数: " + num);
                System.out.println("  验证: " + hundreds + "³ + " + tens + "³ + " + units + "³ = " + 
                                 (hundreds * hundreds * hundreds) + " + " + 
                                 (tens * tens * tens) + " + " + 
                                 (units * units * units) + " = " + sumOfCubes);
                System.out.println();
            }
        }
        
        System.out.println("总共找到 " + count + " 个水仙花数");
        
        // 扩展练习:四位水仙花数(玫瑰花数)
        System.out.println("\n=== 扩展:四位玫瑰花数 ===");
        System.out.println("玫瑰花数:四位数字各位数字的四次方和等于该数本身");
        
        int roseCount = 0;
        for (int num = 1000; num <= 9999; num++) {
            int thousands = num / 1000;           // 千位
            int hundreds = (num / 100) % 10;      // 百位
            int tens = (num / 10) % 10;           // 十位
            int units = num % 10;                 // 个位
            
            int sumOfFourthPowers = thousands * thousands * thousands * thousands +
                                  hundreds * hundreds * hundreds * hundreds +
                                  tens * tens * tens * tens +
                                  units * units * units * units;
            
            if (sumOfFourthPowers == num) {
                roseCount++;
                System.out.println("玫瑰花数: " + num);
                System.out.println("  验证: " + thousands + "⁴ + " + hundreds + "⁴ + " + 
                                 tens + "⁴ + " + units + "⁴ = " + sumOfFourthPowers);
            }
        }
        
        if (roseCount == 0) {
            System.out.println("在1000-9999范围内没有找到玫瑰花数");
        }
        
        // 性能统计
        System.out.println("\n=== 算法性能分析 ===");
        System.out.println("三位水仙花数检查次数: 900次 (100-999)");
        System.out.println("四位玫瑰花数检查次数: 9000次 (1000-9999)");
        System.out.println("时间复杂度: O(n), n为检查范围");
        System.out.println("空间复杂度: O(1), 只使用常数级别的额外空间");
    }
}

🎯 运行结果示例

ini 复制代码
=== 数学算法练习 ===
=== 斐波那契数列前10项 ===
说明:从第3项开始,每一项都是前两项的和
斐波那契数列: 0 1 1 2 3 5 8 13 21 34 

计算过程展示:
第1项: 0
第2项: 1
第3项: 0 + 1 = 1
第4项: 1 + 1 = 2
第5项: 1 + 2 = 3
第6项: 2 + 3 = 5
第7项: 3 + 5 = 8
第8项: 5 + 8 = 13
第9项: 8 + 13 = 21
第10项: 13 + 21 = 34

=== 三位水仙花数 ===
说明:水仙花数是指一个三位数,其各位数字立方和等于该数本身
例如:153 = 1³ + 5³ + 3³ = 1 + 125 + 27 = 153

查找100-999之间的所有水仙花数:
第1个水仙花数: 153
  验证: 1³ + 5³ + 3³ = 1 + 125 + 27 = 153

第2个水仙花数: 371
  验证: 3³ + 7³ + 1³ = 27 + 343 + 1 = 371

第3个水仙花数: 407
  验证: 4³ + 0³ + 7³ = 64 + 0 + 343 = 407

总共找到 3 个水仙花数

🎯 今日作业

1. 必做题:个人信息管理

java 复制代码
// 要求:
// 1. 创建变量存储:姓名、年龄、身高、体重、是否学生
// 2. 计算BMI指数 (体重kg / (身高m)²)
// 3. 根据BMI判断体重状态:<18.5偏瘦,18.5-24正常,>24偏重
// 4. 输出完整的个人信息报告

2. 练习题:成绩统计器

java 复制代码
// 要求:
// 1. 创建一个包含10个学生成绩的数组
// 2. 计算平均分、最高分、最低分
// 3. 统计各个分数段的人数:90+优秀,80-89良好,60-79及格,<60不及格
// 4. 输出详细统计报告

3. 挑战题:简易银行系统

java 复制代码
// 要求:
// 1. 模拟银行账户:初始余额1000元
// 2. 模拟一系列操作:存款、取款、查询余额
// 3. 记录每次操作后的余额变化
// 4. 最后输出操作历史和最终余额

📚 明日预告

第2天学习内容:

  • 面向对象编程入门
  • 类和对象的概念
  • 构造函数和方法
  • this关键字的使用
  • 实战:创建学生类、银行账户类

预习建议: 思考一下你在前端开发中接触过的"对象"概念,比如JavaScript中的对象,这将帮助你更好地理解Java的面向对象编程。


💡 学习小贴士

  1. 多动手练习:每个代码示例都要亲自运行一遍
  2. 理解错误信息:遇到编译错误时,仔细阅读错误提示
  3. 对比学习法:持续将Java语法与JavaScript对比,加深理解
  4. 善用IDE功能
    • 代码自动补全 (Ctrl + Space)
    • 快速修复 (Alt + Enter)
    • 格式化代码 (Ctrl + Alt + L)
  5. 建立知识体系:将今天学的内容整理成思维导图

今日重点回顾:

  • ✅ Java是强类型语言,变量必须声明类型
  • ✅ 分号结尾,大括号包围代码块
  • ✅ 数组长度固定,下标从0开始
  • ✅ for循环、while循环、if-else的使用
  • ✅ 基本的程序调试方法

恭喜你完成了Java学习的第一天!明天我们将进入更有趣的面向对象世界!🚀

相关推荐
有梦想的攻城狮31 分钟前
spring中的ImportSelector接口详解
java·后端·spring·接口·importselector
晨曦~~32 分钟前
SpringCloudAlibaba和SpringBoot版本问题
java·spring boot·后端
天天进步201543 分钟前
Java应用性能监控与调优:从JProfiler到Prometheus的工具链构建
java·开发语言·prometheus
武昌库里写JAVA1 小时前
iview组件库:关于分页组件的使用与注意点
java·vue.js·spring boot·学习·课程设计
小伍_Five1 小时前
spark数据处理练习题番外篇【上】
java·大数据·spark·scala
海尔源码1 小时前
支持多语言的开源 Web 应用
java
摩天崖FuJunWANG2 小时前
c语言中的hashmap
java·c语言·哈希算法
LUCIAZZZ2 小时前
Java设计模式基础问答
java·开发语言·jvm·spring boot·spring·设计模式
hu_nil2 小时前
Python第七周作业
java·前端·python
论迹2 小时前
【JavaEE】-- HTTP
java·http·java-ee