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 + "3 + " + tens + "3 + " + units + "3 = " + 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往期專欄
- Java從入門到“放棄”(精通)之旅——啟航①
- Java從入門到“放棄”(精通)之旅——數據類型與變量②
- Java從入門到“放棄”(精通)之旅——運算符③