6. 【Java】第一个小项目:命令行版的“个人名片生成器”

📅 2026/7/13 16:01:43
6. 【Java】第一个小项目:命令行版的“个人名片生成器”
摘要本文通过一个完整的个人名片生成器小项目将前五篇学习的Java基础知识串联起来。文章详细讲解了如何使用Scanner类实现控制台交互、如何用数组存储数据、如何通过方法封装实现模块化编程并提供了完整的可运行代码示例。这个项目涵盖了变量、数据类型、输入输出、字符串拼接等核心知识点帮助初学者体验从零到一构建实用程序的完整过程。关键词Java入门, Scanner输入, 数组使用, 方法封装, 控制台程序前五篇文章我们走过了 Java 的历史、搭建了开发环境、写出了Hello, World!、弄懂了 JVM 的原理、也掌握了 Java 程序的骨架结构。你现在就像是一个刚学会了基本招式的习武之人——知道怎么站桩、怎么出拳但还没真正打过一场完整的模拟战。今天我们要做一件特别的事把前面学到的所有零散知识串起来写一个真正有点用的小项目。它不是Hello, World!那样只输出一行固定文字的程序而是一个能与用户交互的小工具——它会在命令行里问你几个问题然后根据你的回答生成一张专属的个人名片。别担心代码量不大但每一步我都会解释清楚为什么这样写。让我们开始吧。1. 我们要做什么—— 需求分析先想清楚目标这个程序会依次做三件事打招呼显示一句欢迎语。收集信息在命令行中询问用户的姓名、年龄、城市和一句座右铭。输出名片把收集到的信息以美观的格式打印出来就像一张电子名片。举个例子运行效果大概是这样的 欢迎来到「个人名片生成器」 请输入你的姓名 张三 请输入你的年龄 25 请输入你所在的城市 成都 请输入你的座右铭 保持好奇持续学习 你的专属名片 姓名张三 年龄25岁 城市成都 座右铭保持好奇持续学习 ------------------------ 愿你如座右铭所言活出精彩看起来很朴素对吧但对初学者来说它涵盖了变量、数据类型、控制台输入输出、字符串拼接、方法封装等核心知识点。而且它是一个完整的、可运行的、有实际输出结果的程序——做完之后你会特别有成就感。2. 认识今天的新朋友 —— Scanner我们之前输出用的是System.out.println()这很好理解就是把内容送到控制台。但如果我们想从控制台读取用户输入呢Java 也提供了现成的工具它叫做Scanner。Scanner是 Java 标准库中专门用来解析基本类型和字符串的扫描器。我们可以用它来读取用户在键盘上输入的内容。使用Scanner需要三个步骤// 第一步导入 Scanner 类因为它不在 java.lang 包下importjava.util.Scanner;// 第二步创建 Scanner 对象并指定从标准输入键盘读取ScannerscannernewScanner(System.in);// 第三步使用 scanner 的各种方法读取输入Stringnamescanner.nextLine();// 读取一行字符串intagescanner.nextInt();// 读取一个整数// ... 其他类型System.in代表标准输入流默认就是键盘。Scanner就像一个翻译官把键盘敲进来的原始字节流翻译成我们能读懂的字符串或数字。关于Scanner的常用方法我们先列几个够用的方法作用返回值类型nextLine()读取一整行文本包括空格直到按回车Stringnext()读取一个单词以空白符分隔StringnextInt()读取一个整数intnextDouble()读取一个双精度浮点数doublenextBoolean()读取一个布尔值true/falseboolean特别提醒nextInt()、nextDouble()等不会读取回车符如果你在它们后面紧接着调用nextLine()可能会吞掉一个空行。这个问题我们下面会用一个简单的方法来规避统一使用nextLine()读取字符串然后用Integer.parseInt()转换数字。3. 项目结构设计我们不会把全部代码塞进一个main方法里——那样太乱了也违背了我们上一篇讲的方法应该各司其职的原则。我们设计两个方法collectUserInfo()负责询问用户并收集信息。为了把多个信息打包在一起传递给下一个方法我们先借用一下‘数组’这个概念。你可以把它当成一排连在一起的盒子后面我们会专门讲它。printBusinessCard(...)负责接收收集到的信息并以美观的格式打印出来。main方法只负责调度调用收集方法再调用打印方法。这样的拆分让代码清晰、可复用、易测试。这也是以后写大型项目的基本思路。4. 编写完整代码现在我们打开 IDEA创建一个新项目可以叫MyFirstProject在src下创建一个新类BusinessCardGenerator然后输入下面的代码。我会在关键位置加上详细的注释方便你理解每一部分的用意。// // 文件BusinessCardGenerator.java// 项目第一个小项目 - 个人名片生成器// 说明演示 Java 基本语法、Scanner 输入、// 方法封装、字符串拼接。// packagecom.example.demo;// 包名可以改成你自己的importjava.util.Scanner;// 导入 Scanner 类/** * 命令行版个人名片生成器 * 这个程序会询问用户的信息然后打印一张格式化的名片 */publicclassBusinessCardGenerator{/** * 主入口方法 * 负责流程控制收集信息 - 打印名片 */publicstaticvoidmain(String[]args){// 打印欢迎横幅用多个 println 凑出一个简单的边框System.out.println( 欢迎来到「个人名片生成器」 );System.out.println(请根据提示输入你的信息);// 1. 收集用户信息调用下面的方法// 这个方法会返回一个字符串数组里面装着收集到的 4 条信息String[]userInfocollectUserInfo();// 2. 打印名片调用下面的方法把收集到的信息传进去printBusinessCard(userInfo);// 3. 结束语System.out.println(感谢使用再见);}/** * 收集用户信息的方法 * 使用 Scanner 从键盘读取姓名、年龄、城市、座右铭 * * return 包含姓名、年龄、城市、座右铭的字符串数组 */publicstaticString[]collectUserInfo(){// 创建 Scanner 对象连接到键盘输入ScannerscannernewScanner(System.in);// 准备一个数组来存放 4 条信息String[]infonewString[4];// ---- 1. 询问姓名 ----System.out.print(请输入你的姓名);// print 不换行光标停在同一行等待输入// 使用 nextLine() 读取一整行可以包含空格比如张 三Stringnamescanner.nextLine();info[0]name;// ---- 2. 询问年龄 ----System.out.print(请输入你的年龄);// 这里我们使用 nextLine() 读取一行// 这样做比直接 nextInt() 更安全可以避免后面 nextLine() 被跳过的问题StringageStrscanner.nextLine();// 这里我们没有检查输入是否数字。后续学到异常处理时我们再加入数字校验// 如果想校验可以加 try-catch但初学阶段先简化info[1]ageStr;// ---- 3. 询问城市 ----System.out.print(请输入你所在的城市);Stringcityscanner.nextLine();info[2]city;// ---- 4. 询问座右铭 ----System.out.print(请输入你的座右铭);Stringmottoscanner.nextLine();info[3]motto;// 关闭 Scanner这是一个好习惯释放资源// 注意一旦关闭scanner 就不能再用了scanner.close();// 返回收集到的信息数组returninfo;}/** * 打印名片的方法 * 根据传入的信息数组格式化成美观的名片样式 * * param info 包含姓名、年龄、城市、座右铭的数组 */publicstaticvoidprintBusinessCard(String[]info){// 从数组中取出各个字段增加可读性Stringnameinfo[0];Stringageinfo[1];Stringcityinfo[2];Stringmottoinfo[3];// 打印一个分隔线System.out.println(\n 你的专属名片 );// 使用字符串拼接输出每一行// 注意这里我们使用 来拼接字符串和变量System.out.println(姓名name);System.out.println(年龄age岁);System.out.println(城市city);// 座右铭用引号包裹显得正式一些System.out.println(座右铭\motto\);System.out.println(------------------------);// 最后一句温馨的祝福System.out.println(愿你如座右铭所言活出精彩);}}5. 运行与测试在 IDEA 中右键点击BusinessCardGenerator.java选择Run BusinessCardGenerator.main()然后按照提示输入内容。试试输入一些不同的内容尤其是包含空格的姓名比如欧阳 雪看看程序能否正常处理。如果你遇到任何编译错误检查一下所有符号是不是英文半角尤其是分号、引号、括号类名和文件名是否一致是否漏掉了import java.util.Scanner;6. 代码回顾 —— 我们用了哪些知识现在回过头来看这个不到 70 行的小程序实际上串联了我们前五篇的大部分知识点知识点体现在哪里包声明 (package)第 8 行导入语句 (import)第 10 行类声明 (class)第 15 行文档注释 (/** ... */)第 12-14 行、第 26-28 行等main方法第 19 行程序入口成员方法静态方法collectUserInfo()、printBusinessCard()变量声明与赋值String name scanner.nextLine();等数组String[] info new String[4];字符串拼接年龄 age 岁控制台输出System.out.println()控制台输入Scanner方法调用与参数传递collectUserInfo()返回数组传给printBusinessCard()代码块与缩进花括号匹配和缩进格式你看其实你已经在用真正的编程方式写东西了——不只是在练语法而是在组装功能。7. 一个小优化 —— 用对象代替数组我们现在用数组来传递信息但数组的缺点是我们必须记住索引 0 是姓名、1 是年龄……如果以后增加字段很容易搞错顺序。更优雅的方式是使用自定义类来封装这些信息。虽然我们现在还没学到面向对象的核心但可以简单看一下这个思路你可以先不写只了解// 假设我们定义了一个 PersonInfo 类classPersonInfo{Stringname;intage;Stringcity;Stringmotto;}// 然后在 collectUserInfo 中PersonInfoinfonewPersonInfo();info.namescanner.nextLine();info.ageInteger.parseInt(scanner.nextLine());// ...returninfo;// 在 printBusinessCard 中接收 PersonInfo 对象publicstaticvoidprintBusinessCard(PersonInfoinfo){System.out.println(姓名info.name);// ...}这样代码会更清晰。我们会在第三阶段面向对象篇正式学习这个方式到时候你可以回过头来重构这个项目。8. 异常情况的思考 —— 如果用户输入的不是数字呢目前我们的代码把年龄当成字符串处理所以输入 abc 不会崩溃。但真实业务中年龄往往是需要参与计算的数字。如果我们在代码中加入 Integer.parseInt() 进行转换输入 abc 就会抛出异常……但在初级阶段我们暂时不处理异常先把核心流程跑通。等我们学到异常处理第 25 篇时我会再回过头来加强这个程序让它更健壮。这就是编程的魅力你永远不会一次写出完美的代码但每一次迭代都会让它变得更好。9. 今天的总结今天我们独立完成了一个小项目这是你 Java 旅程中的第一个里程碑。你学会了使用Scanner读取键盘输入用数组存储多个同类型数据将程序拆分成多个方法各司其职字符串拼接的灵活运用一个完整的 Java 程序从编写到运行的全流程更重要的是你体验到了**“把零散的知识组合成一个有用的工具”**的感觉。这种从无到有的创造感正是编程最迷人的地方。动手试试增加一个字段让程序再询问用户的职业或爱好并在名片中显示出来。你需要修改数组大小、增加询问代码、调整打印格式。美化输出尝试在名片周围用*或画一个更大的边框让名片看起来更精致。做完这些你可以把这个小工具分享给朋友让他们也体验一下被程序采访的感觉。相信我看到自己的程序被别人使用那种满足感是看多少书都换不来的。从下一篇开始我们将正式进入第二阶段基础语法的学习。下一站是变量与数据类型——我们将深入讨论 Java 中的各种数据包括整数、小数、字符、真假值以及它们之间的转换关系。我们下一篇见。 获取本系列示例代码请访问 GitCode。