当前位置: 首页 > news >正文

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=0b=1,通过循环计算第3项到第20项(c = a + b)。
  • 每次循环后更新ab的值,确保下一次计算正确。

三、成绩统计:分数区间判断与分析

案例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(...)确保两者都正确。
  • 每次失败后重新接收输入,更新usernamepassword的值。

案例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)、遍历与赋值。

初学者可通过修改案例参数(如斐波那契数列的项数、成绩的分数区间)加深理解,逐步掌握“输入-处理-输出”的编程思维。

http://www.lryc.cn/news/617072.html

相关文章:

  • Mysql系列--5、表的基本查询(上)
  • GitLab 零基础入门指南:从安装到项目管理全流程
  • Java:单例模式
  • Python day40
  • 在Word和WPS文字一页中实现一栏与多栏混排
  • 攻击实验(ARP欺骗、MAC洪范、TCP SYN Flood攻击、DNS欺骗、DHCP饿死)
  • CompletableFuture实现Excel 多个sheet页批量导出
  • 基于PyTorch一文讲清楚损失函数与激活函数并配上详细的图文讲解
  • 展锐平台(Android15)WLAN热点名称修改不生效问题分析
  • 使用tcp ntrip 协议 接收数据报错 java.net.SocketException: Connection reset
  • IDEA 安装插件的两种方式
  • CVPR医学图像三套创新方案:通用分割+3D高效解码+SSM肿瘤定位(附链接)
  • C++高频知识点(二十)
  • jupyter notebook如何打开其他盘目录
  • 创建降阶模型用于搅拌槽中的涡流预测
  • P3232 [HNOI2013] 游走,solution
  • 后量子密码学的迁移与安全保障:迎接量子时代的挑战
  • 力扣559:N叉树的最大深度
  • Beelzebub靶机攻略
  • 腾讯云EdgeOne KV存储在游戏资源发布中的技术实践与架构解析
  • 机器学习之K-means(K-均值)算法
  • 【数据分析】循环移位岭回归分析:光遗传学冻结行为模式研究
  • 复现论文《多无人机协同任务分配算法设计与实现》
  • 小学数学计算技巧全攻略
  • 7、西门子PLC基础术语:数据单位、存储区域、寻址方式、字节序
  • 生产环境中atop命令使用总结
  • FreeRTOS 任务与中断函数:运行机制、关键区别与使用准则
  • GC如何判断对象可以被回收?
  • 利用容器编排完成haproxy和nginx负载均衡架构实施
  • 【代码随想录day 15】 力扣 222.完全二叉树的节点个数