Java 中的逻辑控制:输入输出

📅 2026/7/18 13:39:26 👁️ 阅读次数 📝 编程学习
Java 中的逻辑控制:输入输出

输入输出

1. 控制台输出(3种核心方式)

System.out.println(内容)// 输出后自动换行System.out.print(内容)// 输出后不换行System.out.printf(格式,参数)// 格式化输出(和 C语言 printf 用法一致)

示例:

System.out.println("Hello, Java");System.out.print("请输入: ");System.out.printf("年龄: %d, 体重: %.1fkg",18,62.5);

输出结果:

格式化输出常用的占位符:

占位符类型 / 作用示例输出
%d十进制整数(“数字:%d”, 100);数字:100
%x十六进制整数(小写)(“小写十六进制:%x”, 255);小写十六进制:ff
%X十六进制整数(大写)(“大写十六进制:%X”, 255);大写十六进制:FF
%f浮点数(默认6位小数)(“价格:%.2f”, 9.9);价格:9.90
%s字符串(“姓名:%s”, “张三”);姓名:张三
%c单个字符(“单个字符:%c”, ‘A’)单个字符:A
%%输出百分号占位符(“当前进度:75%%”);当前进度:75%
%b布尔值(小写)(“布尔结果:%b”, 10 > 5);布尔结果:true
%B布尔值(大写)(“大写布尔:%B”, 1 == 2);大写布尔:FALSE
%e科学计数法(“科学计数法:%e”, 1234567.89);科学计数法:1.234568e+06

2. 控制台输入(核心用Scanner类)

Java 控制台输入必须先导入java.util.Scanner工具类,通过它读取用户输入的不同类型数据,以下是语法:

importjava.util.Scanner;// 导入Scanner类// 创建Scanner对象, 绑定标准输入流(键盘)// Scanner 对象名 = new Scanner(System.in);Scannerscan=newScanner(System.in);// 具体所需的输入内容// 数据类型 变量名 = 对象名.输出类型();intage=scan.nextInt();// 关闭输入调用, 释放系统输入资源// 对象名.close();scan.close();

2.1 基础类型匹配

以下是常用用法:
Scanner为每种基础数据类型提供了专属的读取方法,输入内容必须符合对应类型的格式规范,否则会抛出InputMismatchException异常:

目标数据类型对应读取方法
intnextInt()
doublenextDouble()
booleannextBoolean()
String 字符串next()
String 整行文本nextLine()

2.2 常用用法

  1. 单组输入
importjava.util.Scanner;// 导入Scanner类publicstaticvoidmain(String[]args){// 创建Scanner对象, 绑定标准输入流(键盘)Scannerscan=newScanner(System.in);System.out.print("请输入姓名: ");Stringname=scan.nextLine();// 读取一整行字符串(包含空格)System.out.print("请输入年龄: ");intage=scan.nextInt();// 读取整数System.out.print("请输入工资/月: ");doublesalary=scan.nextDouble();// 读取浮点数// 输出结果System.out.printf("姓名: %s, 年龄: %d, 工资: %.1f%n",name,age,salary);scan.close();// 必须调用, 释放资源}

输出结果:

  1. 多组输入
    如果需要批量读取数据,用hasNextXxx()has对应读取类型)方法判断是否还有输入:
    采用while循环语句进行不断循环
// 计算输入整数的和importjava.util.Scanner;publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);intsum=0;intcount=0;// 循环读取整数, 直到用户输入非整数或结束while(scanner.hasNextInt()){intnum=scanner.nextInt();sum+=num;count++;}System.out.printf("共输入%d个数, 总和: %d%n",count,sum);scanner.close();}

输出结果:

注意: 连续输入 使用Ctrl + z或者Ctrl + d强制结束输入,或者输入非 hasNextXxx()非 has对应读取类型)结束输入

2.3 常见的匹配错误

nextInt()nextDouble()这类数值读取方法,只会读取数值本身,不会把输入完数值后按下的回车换行符自动去掉
如果接着调用nextLine(),它会直接读取换行符为输入内容,最终得到空字符串,跳过预期的字符串输入步骤

错误示例:

importjava.util.Scanner;publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);System.out.print("请输入您的年龄: ");intage=scanner.nextInt();System.out.print("请输入您的姓名: ");Stringname=scanner.nextLine();// 这里直接读到换行符, name变成空字符串scanner.close();}

输出结果:

解决方法:再调用一次scanner.nextLine();即可

importjava.util.Scanner;publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);System.out.print("请输入您的年龄: ");intage=scanner.nextInt();// 读取回车scanner.nextLine();// 清空缓冲区的换行符System.out.print("请输入您的姓名: ");Stringname=scanner.nextLine();// 现在可以正常读取带空格的 name 了scanner.close();}

输出结果:

2.4 其他注意事项

  1. 所有nextXxx()数值方法都会自动忽略输入前的空格、制表符,只读取有效数值部分
  2. Scanner使用完毕后记得调用对象名.close()关闭,释放系统输入资源,养成良好的编码习惯