ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

第04课-控制台输入输出

第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对象ScannerscannernewScanner(System.in);// 第3步读取输入intnumscanner.nextInt();// 读取整数doubledscanner.nextDouble();// 读取浮点数Stringstrscanner.nextLine();// 读取一整行Stringwordscanner.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){ScannerscannernewScanner(System.in);System.out.println( 用户信息采集 \n);// 输入姓名System.out.print(请输入您的姓名: );Stringnamescanner.nextLine();// 输入年龄System.out.print(请输入您的年龄: );intagescanner.nextInt();// 输入身高System.out.print(请输入您的身高(米): );doubleheightscanner.nextDouble();// 输入性别System.out.print(请输入您的性别(男/女): );Stringgenderscanner.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){ScannerscannernewScanner(System.in);System.out.println( 简易计算器 \n);// 输入两个数System.out.print(请输入第一个数: );doublenum1scanner.nextDouble();System.out.print(请输入第二个数: );doublenum2scanner.nextDouble();// 计算并输出结果System.out.println(\n 计算结果 );System.out.printf(%.2f %.2f %.2f%n,num1,num2,num1num2);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){ScannerscannernewScanner(System.in);System.out.println( 成绩录入系统 \n);// 输入学生信息System.out.print(请输入学生姓名: );Stringnamescanner.nextLine();System.out.print(请输入语文成绩: );doublechinesescanner.nextDouble();System.out.print(请输入数学成绩: );doublemathscanner.nextDouble();System.out.print(请输入英语成绩: );doubleenglishscanner.nextDouble();// 计算doubletotalchinesemathenglish;doubleaveragetotal/3;// 确定等级Stringlevel;if(average90){level优秀;}elseif(average80){level良好;}elseif(average70){level中等;}elseif(average60){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();}}四、常见错误错误1Scanner缓冲区问题importjava.util.Scanner;// 错误示例nextInt()后直接用nextLine()ScannerscannernewScanner(System.in);System.out.print(请输入年龄: );intagescanner.nextInt();// 读取整数回车留在缓冲区System.out.print(请输入姓名: );Stringnamescanner.nextLine();// 读取了回车得到空字符串System.out.println(姓名: name);// 输出空// 正确写法1在nextInt()后加一个nextLine()消耗回车scanner.nextInt();// 读取整数scanner.nextLine();// 消耗回车Stringnamescanner.nextLine();// 现在能正确读取// 正确写法2全部使用nextLine()手动解析StringageStrscanner.nextLine();intageInteger.parseInt(ageStr);错误2输入类型不匹配ScannerscannernewScanner(System.in);System.out.print(请输入一个整数: );// 如果用户输入 abcintnumscanner.nextInt();// InputMismatchException!// 正确做法先检查if(scanner.hasNextInt()){intnumscanner.nextInt();}else{System.out.println(输入的不是整数);scanner.next();// 消耗无效输入}错误3忘记关闭Scanner// 不推荐ScannerscannernewScanner(System.in);// ... 使用scanner// 忘记关闭// 推荐写法ScannerscannernewScanner(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输入类使用前需importnextInt()读取整数nextDouble()读取浮点数nextLine()读取一整行next()读取一个单词常见陷阱nextInt()后要用nextLine()消耗回车本课程持续更新中欢迎关注
返回列表