学习时间: 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的面向对象编程。
💡 学习小贴士
- 多动手练习:每个代码示例都要亲自运行一遍
- 理解错误信息:遇到编译错误时,仔细阅读错误提示
- 对比学习法:持续将Java语法与JavaScript对比,加深理解
- 善用IDE功能 :
- 代码自动补全 (Ctrl + Space)
- 快速修复 (Alt + Enter)
- 格式化代码 (Ctrl + Alt + L)
- 建立知识体系:将今天学的内容整理成思维导图
今日重点回顾:
- ✅ Java是强类型语言,变量必须声明类型
- ✅ 分号结尾,大括号包围代码块
- ✅ 数组长度固定,下标从0开始
- ✅ for循环、while循环、if-else的使用
- ✅ 基本的程序调试方法
恭喜你完成了Java学习的第一天!明天我们将进入更有趣的面向对象世界!🚀