Java从入门到“放弃”(精通)之旅🚀:程序逻辑的完美理解
一、开篇:程序员的"人生选择"
曾经的我,生活就像一段顺序执行的代码:
System.out.println("早上8:00起床"); System.out.println("洗漱"); System.out.println("吃早饭"); // ... 重复枯燥的生活
直到某天,我的代码里加入了分支结构:
if(不好好学习){ System.out.println("可能要卖红薯🍠"); }else{ System.out.println("好好学习,走上人生巅峰💪"); }
从此,我的生活变成了充满循环的奋斗史:
while(活着){ 学习(); 敲代码(); 刷题(); if(竞赛拿奖){ Score++; } }
二、顺序结构:代码界的"直男"
顺序结构就像直男的思维——简单直接,一步一个脚印:
System.out.println("第一步:起床");
System.out.println("第二步:打开IDE");
System.out.println("第三步:假装自己在学习");
⚠️ 警告:千万别把第三步放到第一步前面,除非你想体验"梦中编程"的快乐。
三、分支结构:程序员的"选择困难症"
1. if语句:人生处处是选择
if(熬夜时间 == 0){
System.out.println("养生学霸型:早睡早起,成绩优异");
}else if(熬夜时间 <= 2){
System.out.println("普通学生型:偶尔熬夜,生活规律");
}else if(熬夜时间 <= 4){
System.out.println("期末冲刺型:咖啡续命,笔记飞起");
}else if(熬夜时间 <= 6){
System.out.println("DDL战士型:生死时速,键盘冒烟");
}else{
System.out.println("修仙大佬型:见过凌晨四点的校园吗?天天见!");
}
2. switch语句:多选项的烦恼
switch(减压方式){
case "写代码":
System.out.println("这算减压?");
break;
case "改bug":
System.out.println("这明明是增压!");
break;
default:
System.out.println("还是熬夜吧");
}
🎓 冷知识:switch不支持long类型,就像程序员不支持长时间不写代码一样
四、循环结构:程序员的"复读机模式"
1. while循环:bug改不完的绝望
while(bug存在){
System.out.println("我再改最后一个bug");
// 此处应有break,但程序员总是忘记
}
2. for循环:优雅的计数君
for(int i=1; i<=熬夜天数; i++){
System.out.println("第" + i + "天熬夜复习");
if(i == 3){
System.out.println("⚠️ 警告:黑眼圈已形成");
}
else if(i == 5){
System.out.println("⚠️⚠️ 严重警告:开始靠咖啡续命");
}
else if(i == 7){
System.out.println("💀 系统提示:您的健康值即将耗尽");
}
if(熬夜天数 >= 10){
System.out.println("🎓 成就解锁:获得『考试周生存专家』称号!");
break;
}
}
3. do-while循环:至少执行一次的倔强
do{
System.out.println("我保证这是最后一次熬夜");
}while(咖啡因还起作用);
五、控制语句:程序员的"后悔药"
1. break:及时止损
while(上课中){
if(老师突然点名提问){
System.out.println("【系统警报】检测到危险信号!");
System.out.println("执行紧急预案:");
System.out.println("1. 低头假装记笔记");
System.out.println("2. 眼神躲避术启动");
System.out.println("3. 默念'不要点我'");
break; // 终止当前危机
}
}
2. continue:选择性失忆
for(一天中的时间){
if(是睡觉时间){
continue; // 跳过睡觉,继续coding
}
写代码();
}
六、实战演练:猜数字游戏 🎮
import java.util.Random;
import java.util.Scanner;
public class GuessNumber {
public static void main(String[] args) {
Random random = new Random();
Scanner sc = new Scanner(System.in);
int target = random.nextInt(100) + 1; // 1-100的随机数
System.out.println("欢迎来到猜数字游戏!(开发者已偷偷把答案设为:" + target + ")");
while(true){
System.out.println("请输入你的猜测(1-100):");
int guess = sc.nextInt();
if(guess < target){
System.out.println("猜小了,再大胆点!");
}else if(guess > target){
System.out.println("猜大了,收着点!");
}else{
System.out.println("恭喜你猜对了!奖励一朵小红花🌸");
break;
}
}
sc.close();
}
}
💡 彩蛋:把注释掉的
System.out.println("toGuess: " + toGuess);
取消注释,你就是游戏界的"内部人员"了!
七、练习题:程序员的"脑力激荡"
- 年龄分段器:输入年龄自动输出你是少年/青年/中年/老年(温馨提示:慎测程> 序员年龄)
import java.util.Scanner; public class AgeClassifier { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入你的年龄:"); int age = scanner.nextInt(); if (age < 0) { System.out.println("年龄不能为负数!"); } else if (age <= 18) { System.out.println("少年:青春无敌,好好学习!"); } else if (age <= 28) { System.out.println("青年:奋斗的黄金时期,加油!"); } else if (age <= 55) { System.out.println("中年:家庭事业双丰收的阶段"); } else { System.out.println("老年:享受生活,保持健康"); } scanner.close(); } }
- 素数鉴定师:判断一个数是否为素数(数学老师看了都点赞)
import java.util.Scanner; public class PrimeChecker { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个正整数:"); int num = scanner.nextInt(); if (num <= 1) { System.out.println(num + " 不是素数"); return; } boolean isPrime = true; for (int i = 2; i <= Math.sqrt(num); i++) { if (num % i == 0) { isPrime = false; break; } } if (isPrime) { System.out.println(num + " 是素数"); } else { System.out.println(num + " 不是素数"); } scanner.close(); } }
- 闰年探测器:找出1000-2000年所有闰年(历史学家都说好)
在这里插入代码片public class LeapYearFinder { public static void main(String[] args) { System.out.println("1000-2000年之间的闰年有:"); int count = 0; for (int year = 1000; year <= 2000; year++) { if (isLeapYear(year)) { System.out.print(year + " "); count++; if (count % 10 == 0) { // 每10个换一行 System.out.println(); } } } System.out.println("\n共计:" + count + "个闰年"); } // 判断闰年的方法 public static boolean isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } }
- 水仙花数:找出所有水仙花数(比真花还难找的数字)
public class NarcissisticNumber { public static void main(String[] args) { System.out.println("所有的三位数水仙花数:"); for (int num = 100; num < 1000; num++) { int hundreds = num / 100; int tens = (num / 10) % 10; int units = num % 10; // 计算各位数字的立方和 int sum = (int)(Math.pow(hundreds, 3) + (int)(Math.pow(tens, 3)) + (int)(Math.pow(units, 3)); if (sum == num) { System.out.println(num + " 是水仙花数"); System.out.println("验证:" + hundreds + "³ + " + tens + "³ + " + units + "³ = " + sum); } } } }
- 二进制解剖:分析数字的二进制表示(让你看清数字的"本质")
import java.util.Scanner; public class BinaryAnalyzer { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个整数:"); int num = scanner.nextInt(); System.out.println("原始数字:" + num); System.out.println("二进制表示:" + Integer.toBinaryString(num)); // 计算1的个数 int count = Integer.bitCount(num); System.out.println("二进制中1的个数:" + count); // 输出奇数位和偶数位 System.out.print("奇数位(从右往左数,第一位为1):"); for (int i = 31; i >= 0; i--) { if (i % 2 == 0) { // 奇数位(因为从0开始计数) System.out.print((num >> i) & 1); } } System.out.print("\n偶数位:"); for (int i = 31; i >= 0; i--) { if (i % 2 == 1) { // 偶数位 System.out.print((num >> i) & 1); } } scanner.close(); } }
八、关于一些格式化字符串
九、结语:代码如人生
记住,编程就像人生:
- 顺序执行是基础
- 分支选择决定方向
- 循环坚持才能成功
- 偶尔break是为了更好的continue
🔑🔑🔑
while(活着){
学习();
进步();
if(遇到bug){
解决它();
}else{
制造bug(); // 这样才能进步
}
}
JavaSE往期专栏