实用指南: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")) {
// 假设正确密码为666666
System.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)、遍历与赋值。
初学者可通过修改案例参数(如斐波那契数列的项数、成绩的分数区间)加深理解,逐步掌握“输入-处理-输出”的编程思维。
浙公网安备 33010602011771号