在Java編程學習中,輸入輸出、循環控制和邏輯判斷是核心基礎。本文整理了10個經典案例,涵蓋Scanner
輸入處理、斐波那契數列、成績統計、登錄驗證等場景,幫助初學者掌握編程邏輯與實用技巧。
一、Scanner輸入交互:獲取用戶輸入并處理
Scanner
是Java中處理用戶輸入的常用類,以下案例展示了如何通過Scanner
實現不同場景的輸入交互。
案例1:數字拆分與加法表
功能:接收用戶輸入的數字,打印所有“兩個數相加等于該數字”的組合。
package a1;
import java.util.Scanner;public class NumberSplitter {public static void main(String[] args) {System.out.println("請輸入一個數字");Scanner s1 = new Scanner(System.in);int a = s1.nextInt(); // 接收整數輸入// 循環打印所有相加等于a的組合for (int i = 0; i <= a; i++) {System.out.println(i + "+" + (a - i) + "=" + a);}}
}
解析:
- 通過
Scanner.nextInt()
獲取用戶輸入的整數。 - 外層循環遍歷從0到
a
的所有整數i
,計算對應的另一個加數a-i
,打印加法公式。
案例2:跑步進度交互
功能:模擬跑步進度提示,每跑400米詢問用戶狀態,根據輸入決定繼續或休息。
package a1;
import java.util.Scanner;public class RunningTracker {public static void main(String[] args) {// 從400米開始,每次遞增400米,直到4000米for (int i = 400; i <= 4000; i += 400) {System.out.println("你已經跑了" + i + "米,累了嗎?");Scanner s1 = new Scanner(System.in);String a = s1.next(); // 接收字符串輸入// 根據用戶輸入判斷后續操作if (a.equals("累了")) {System.out.println("休息!");break; // 退出循環,停止跑步} else if (a.equals("不累")) {System.out.println("繼續跑!");} else {System.out.println("輸入錯誤,繼續跑!");}}}
}
解析:
- 外層循環以400米為間隔遞增,模擬跑步進度。
- 通過
Scanner.next()
接收用戶輸入的字符串(“累了”“不累”或其他),用equals()
方法比較字符串,實現分支邏輯。
案例3:成績錄入與平均分計算
功能:接收5門課程的成績,計算并打印平均分。
package a1;
import java.util.Scanner;public class ScoreAverage {public static void main(String[] args) {System.out.println("請輸入你的姓名");Scanner s1 = new Scanner(System.in);String name = s1.next(); // 接收姓名double sum = 0; // 總成績for (int i = 1; i <= 5; i++) {System.out.println("請輸入你第" + i + "門的成績");Scanner s2 = new Scanner(System.in);int score = s2.nextInt(); // 接收成績if (score > 0) { // 簡單校驗成績有效性sum += score;} else {System.out.println("輸入錯誤");}}System.out.println(name + "的平均分為" + (sum / 5));}
}
解析:
- 用
sum
變量累加有效成績,通過循環接收5門成績。 - 注意:實際開發中需完善成績校驗(如0-100分范圍),此處僅做簡單判斷。
二、斐波那契數列:經典數學序列的實現
斐波那契數列是指從0和1開始,后續每一項都是前兩項之和(如0, 1, 1, 2, 3, 5…)。
案例4:打印前20項斐波那契數
package a1;public class FibonacciSequence {public static void main(String[] args) {int a = 0; // 第n-2項int b = 1; // 第n-1項int c = 0; // 第n項(結果)for (int i = 1; i <= 20; i++) {c = a + b; // 計算當前項a = b; // 更新前兩項的值b = c;System.out.println(c); // 打印當前項}}
}
解析:
- 初始值
a=0
、b=1
,通過循環計算第3項到第20項(c = a + b
)。 - 每次循環后更新
a
和b
的值,確保下一次計算正確。
三、成績統計:分數區間判斷與分析
案例5:成績等級判斷與優秀率計算
功能:輸入5門成績,判斷每門成績的等級(不合格/良好/優秀),統計80分以上的人數及平均分。
package a1;
import java.util.Scanner;public class ScoreAnalyzer {public static void main(String[] args) {double sumExcellent = 0; // 80分以上成績總和int countExcellent = 0; // 80分以上人數for (int i = 1; i <= 5; i++) {System.out.println("請輸入你第" + i + "門的成績");Scanner s2 = new Scanner(System.in);int score = s2.nextInt();// 判斷成績等級if (score >= 0 && score <= 60) {System.out.println("成績不合格");} else if (score > 60 && score <= 80) {System.out.println("成績良好");} else if (score > 80 && score <= 100) {System.out.println("成績優秀");sumExcellent += score;countExcellent++;} else {System.out.println("輸入錯誤");}}// 打印統計結果(注意避免除以0)if (countExcellent > 0) {System.out.println("成績大于80分的人數為" + countExcellent + "。平均成績為" + (sumExcellent / countExcellent));} else {System.out.println("沒有成績大于80分的科目");}}
}
解析:
- 用多重
if-else
判斷成績區間,對80分以上的成績單獨累加和計數。 - 最后判斷優秀人數是否為0,避免除法運算出錯。
四、機會限制問題:登錄驗證與輸入次數控制
案例6:密碼驗證(3次機會)
功能:用戶輸入密碼,最多有3次機會,正確則登錄成功,失敗3次則凍結賬戶。
package a1;
import java.util.Scanner;public class PasswordValidator {public static void main(String[] args) {System.out.println("請輸入你的密碼");for (int i = 1; i <= 3; i++) { // 限制3次機會Scanner s2 = new Scanner(System.in);String password = s2.next();if (password.equals("666666")) { // 假設正確密碼為666666System.out.println("成功進入主界面");break; // 驗證通過,退出循環} else {int remaining = 3 - i; // 計算剩余機會System.out.println("輸入錯誤,你還有" + remaining + "次機會");if (remaining == 0) {System.out.println("用戶卡被凍結,不能再輸了");}}}}
}
解析:
- 循環次數
i
從1到3,通過3 - i
計算剩余機會。 - 驗證成功用
break
退出循環,失敗3次后提示賬戶凍結。
案例7:用戶名+密碼雙重驗證
功能:同時驗證用戶名和密碼,3次失敗則鎖定,每次失敗后可重新輸入。
package a1;
import java.util.Scanner;public class UserLogin {public static void main(String[] args) {// 初始輸入用戶名和密碼System.out.println("請輸入用戶名");Scanner s = new Scanner(System.in);String username = s.next();System.out.println("請輸入密碼");Scanner s2 = new Scanner(System.in);String password = s2.next();for (int i = 1; i <= 3; i++) {if (username.equals("666666") && password.equals("666666")) {System.out.println("成功進入主界面");break;} else {int remaining = 3 - i;System.out.println("輸入錯誤!你還有" + remaining + "次機會!");if (remaining == 0) {System.out.println("對不起,您3次均輸入錯誤!");} else {// 重新輸入用戶名和密碼System.out.println("請輸入用戶名");Scanner s3 = new Scanner(System.in);username = s3.next();System.out.println("請輸入密碼");Scanner s4 = new Scanner(System.in);password = s4.next();}}}}
}
解析:
- 雙重驗證條件
username.equals(...) && password.equals(...)
確保兩者都正確。 - 每次失敗后重新接收輸入,更新
username
和password
的值。
案例8:會員信息錄入與驗證
功能:錄入會員信息(4位會員號、生日、積分),驗證會員號有效性(1000-9999之間)。
package a1;
import java.util.Scanner;public class MemberInfo {public static void main(String[] args) {// 循環錄入2條會員信息for (int i = 1; i <= 2; i++) {System.out.println("請輸入會員號(<4位整數>):");Scanner s = new Scanner(System.in);int memberId = s.nextInt();System.out.println("請輸入會員生日(月/日<用兩位整數表示>):");Scanner s22 = new Scanner(System.in);String birthday = s22.next();System.out.println("請輸入會員積分:");Scanner s3 = new Scanner(System.in);int points = s3.nextInt();// 打印信息并驗證會員號System.out.println(memberId + " " + birthday + " " + points);if (!(memberId > 1000 && memberId < 10000)) {System.out.println("客戶號" + memberId + "是無效會員號!\n輸入信息失敗");}}}
}
解析:
- 循環2次錄入會員信息,包含整數(會員號、積分)和字符串(生日)。
- 用
!(memberId > 1000 && memberId < 10000)
判斷會員號是否為4位有效數字。
五、數組操作:字符串數組的定義與遍歷
案例9:遍歷打印字符串數組
功能:定義包含3個姓名的數組,通過循環打印所有元素。
package a1;public class NameArray {public static void main(String[] args) {String names[] = {"張三", "李四", "王五"}; // 定義字符串數組// 遍歷數組(a.length獲取數組長度)for (int i = 0; i < names.length; i++) {System.out.println(names[i]);}}
}
解析:
- 數組定義:
String[] 數組名 = {元素1, 元素2, ...}
。 - 用
數組名.length
獲取長度,避免硬編碼索引,提高靈活性。
案例10:動態錄入數組元素
功能:通過Scanner
接收5個學生姓名,存儲到數組中并打印。
package a1;
import java.util.Scanner;public class StudentArray {public static void main(String[] args) {String[] students = new String[5]; // 定義長度為5的字符串數組Scanner s = new Scanner(System.in);// 錄入5個學生姓名for (int i = 0; i < students.length; i++) {System.out.println("請輸入第" + (i + 1) + "個學生的姓名");students[i] = s.next(); // 為數組元素賦值}// 打印所有姓名System.out.println("你輸入的5個學生的姓名為:");for (int i = 0; i < students.length; i++) {System.out.println(students[i] + " ");}}
}
解析:
- 數組初始化:
new String[5]
創建長度為5的空數組。 - 通過循環為每個索引賦值,再遍歷打印,體現數組的動態使用。
總結:基礎邏輯的核心應用
以上案例覆蓋了Java編程的核心基礎:
- 輸入處理:
Scanner
類的nextInt()
(整數)和next()
(字符串)方法。 - 循環控制:
for
循環的計數、范圍控制,break
的退出邏輯。 - 邏輯判斷:
if-else
分支、equals()
字符串比較、邏輯運算符(&&
)。 - 數組操作:初始化、長度獲取(
length
)、遍歷與賦值。
初學者可通過修改案例參數(如斐波那契數列的項數、成績的分數區間)加深理解,逐步掌握“輸入-處理-輸出”的編程思維。