Java 基础编程案例:斐波拉契数与从输入交互到逻辑处理
在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
)、遍历与赋值。
初学者可通过修改案例参数(如斐波那契数列的项数、成绩的分数区间)加深理解,逐步掌握“输入-处理-输出”的编程思维。