news 2026/9/6 13:14:59

第04课-控制台输入输出

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第04课-控制台输入输出

第04课:控制台输入输出

本课目标:掌握Java控制台输出(println、printf)和使用Scanner类进行用户输入。


一、概念讲解

1.1 输出方法

┌────────────────────────────────────────────┐ │ System.out 输出方法 │ ├────────────────────────────────────────────┤ │ println() - 输出后换行 │ │ print() - 输出后不换行 │ │ printf() - 格式化输出(C语言风格) │ └────────────────────────────────────────────┘

1.2 输入流程

┌──────────┐ 读取数据 ┌──────────┐ │ 用户输入 │ ──────────→ │ Scanner │ │ (键盘) │ │ 对象 │ └──────────┘ └────┬─────┘ │ ┌───────────┴───────────┐ │ 调用对应方法获取数据 │ │ nextInt() │ │ nextDouble() │ │ nextLine() │ │ next() │ └───────────────────────┘

1.3 printf格式说明符

格式符说明示例
%d整数printf(“%d”, 10) → 10
%f浮点数printf(“%f”, 3.14) → 3.140000
%s字符串printf(“%s”, “hello”) → hello
%c字符printf(“%c”, ‘A’) → A
%n平台相关换行跨平台换行符
%%输出%本身printf(“100%%”) → 100%

1.4 printf精度控制

// 保留2位小数printf("%.2f",3.14159)// → 3.14// 宽度控制printf("%10d",42)// → " 42"(右对齐,占10位)printf("%-10d",42)// → "42 "(左对齐)

二、语法格式

2.1 Scanner使用步骤

// 第1步:导入Scanner类importjava.util.Scanner;// 第2步:创建Scanner对象Scannerscanner=newScanner(System.in);// 第3步:读取输入intnum=scanner.nextInt();// 读取整数doubled=scanner.nextDouble();// 读取浮点数Stringstr=scanner.nextLine();// 读取一整行Stringword=scanner.next();// 读取一个单词// 第4步:关闭Scanner(可选但建议)scanner.close();

2.2 输出方法对比

System.out.println("Hello");// 输出Hello并换行System.out.print("Hello");// 输出Hello不换行System.out.print("World");// 接着输出World// 结果:HelloWorld(在同一行)// printf格式化System.out.printf("姓名: %s, 年龄: %d%n","张三",25);

三、代码案例

案例1:用户信息输入

importjava.util.Scanner;publicclassUserInfo{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);System.out.println("===== 用户信息采集 =====\n");// 输入姓名System.out.print("请输入您的姓名: ");Stringname=scanner.nextLine();// 输入年龄System.out.print("请输入您的年龄: ");intage=scanner.nextInt();// 输入身高System.out.print("请输入您的身高(米): ");doubleheight=scanner.nextDouble();// 输入性别System.out.print("请输入您的性别(男/女): ");Stringgender=scanner.next();// 输出信息System.out.println("\n===== 您的信息 =====");System.out.println("姓名: "+name);System.out.println("年龄: "+age+"岁");System.out.println("身高: "+height+"米");System.out.println("性别: "+gender);// 使用printf格式化输出System.out.println("\n===== 格式化输出 =====");System.out.printf("姓名: %s%n",name);System.out.printf("年龄: %d岁%n",age);System.out.printf("身高: %.2f米%n",height);System.out.printf("性别: %s%n",gender);scanner.close();}}

案例2:简易计算器

importjava.util.Scanner;publicclassSimpleCalculator{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);System.out.println("===== 简易计算器 =====\n");// 输入两个数System.out.print("请输入第一个数: ");doublenum1=scanner.nextDouble();System.out.print("请输入第二个数: ");doublenum2=scanner.nextDouble();// 计算并输出结果System.out.println("\n===== 计算结果 =====");System.out.printf("%.2f + %.2f = %.2f%n",num1,num2,num1+num2);System.out.printf("%.2f - %.2f = %.2f%n",num1,num2,num1-num2);System.out.printf("%.2f × %.2f = %.2f%n",num1,num2,num1*num2);if(num2!=0){System.out.printf("%.2f ÷ %.2f = %.2f%n",num1,num2,num1/num2);System.out.printf("%.2f %% %.2f = %.2f%n",num1,num2,num1%num2);}else{System.out.println("除数不能为0!");}scanner.close();}}

案例3:成绩录入系统

importjava.util.Scanner;publicclassGradeSystem{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);System.out.println("===== 成绩录入系统 =====\n");// 输入学生信息System.out.print("请输入学生姓名: ");Stringname=scanner.nextLine();System.out.print("请输入语文成绩: ");doublechinese=scanner.nextDouble();System.out.print("请输入数学成绩: ");doublemath=scanner.nextDouble();System.out.print("请输入英语成绩: ");doubleenglish=scanner.nextDouble();// 计算doubletotal=chinese+math+english;doubleaverage=total/3;// 确定等级Stringlevel;if(average>=90){level="优秀";}elseif(average>=80){level="良好";}elseif(average>=70){level="中等";}elseif(average>=60){level="及格";}else{level="不及格";}// 输出报告System.out.println("\n===== 成绩报告 =====");System.out.printf("学生: %s%n",name);System.out.printf("语文: %.1f 分%n",chinese);System.out.printf("数学: %.1f 分%n",math);System.out.printf("英语: %.1f 分%n",english);System.out.printf("总分: %.1f 分%n",total);System.out.printf("平均: %.1f 分%n",average);System.out.printf("等级: %s%n",level);scanner.close();}}

四、常见错误

错误1:Scanner缓冲区问题

importjava.util.Scanner;// 错误示例:nextInt()后直接用nextLine()Scannerscanner=newScanner(System.in);System.out.print("请输入年龄: ");intage=scanner.nextInt();// 读取整数,回车留在缓冲区System.out.print("请输入姓名: ");Stringname=scanner.nextLine();// 读取了回车,得到空字符串!System.out.println("姓名: "+name);// 输出空!// 正确写法1:在nextInt()后加一个nextLine()消耗回车scanner.nextInt();// 读取整数scanner.nextLine();// 消耗回车Stringname=scanner.nextLine();// 现在能正确读取// 正确写法2:全部使用nextLine(),手动解析StringageStr=scanner.nextLine();intage=Integer.parseInt(ageStr);

错误2:输入类型不匹配

Scannerscanner=newScanner(System.in);System.out.print("请输入一个整数: ");// 如果用户输入 "abc"intnum=scanner.nextInt();// InputMismatchException!// 正确做法:先检查if(scanner.hasNextInt()){intnum=scanner.nextInt();}else{System.out.println("输入的不是整数!");scanner.next();// 消耗无效输入}

错误3:忘记关闭Scanner

// 不推荐Scannerscanner=newScanner(System.in);// ... 使用scanner// 忘记关闭// 推荐写法Scannerscanner=newScanner(System.in);try{// ... 使用scanner}finally{scanner.close();}// 或者在程序结束时关闭scanner.close();

五、课后练习

练习1(基础)

编写程序,输入圆的半径,输出圆的面积和周长。要求使用printf保留2位小数。

练习2(进阶)

编写程序,输入秒数,将其转换为"小时:分钟:秒"的格式。例如:输入3661,输出"1:1:1"。

练习3(思考题)

编写程序,输入一个四位数,输出其千位、百位、十位、个位数字,以及各位数字之和。


六、本课小结

知识点要点
println()输出内容并换行
print()输出内容不换行
printf()格式化输出,%d整数、%f浮点、%s字符串、%c字符、%n换行
Scanner输入类,使用前需import
nextInt()读取整数
nextDouble()读取浮点数
nextLine()读取一整行
next()读取一个单词
常见陷阱nextInt()后要用nextLine()消耗回车

本课程持续更新中,欢迎关注!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/6 13:13:28

AI伙伴+派对游戏:从波兰球到社区共创的技术拆解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/6 13:11:42

PI SDK开发常见Bug排查与修复:依赖管理、环境配置与API稳定性

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/6 13:07:27

JMeter性能测试完全指南:从零搭建到实战压测与结果分析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/6 13:02:20

西方巨物美学:DRAGONLORD · 巨龙战争

从创作理念到 AIGC 实践,我如何构建西方巨物美学如果只把 DRAGONLORD 当成三张 AI 海报,它并不复杂。但我真正想记录的,是一个更基础的问题:一个完全没有接触过 AIGC 的人,能不能按照同样的方法,做出属于自…

作者头像 李华
网站建设 2026/9/6 13:01:04

spring整合Junit4

Maven依赖&#xff1a; <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version> </dependency> <dependency><groupId>org.springframework</groupId><artifact…

作者头像 李华