输入输出
- 一、输出语句
- 1. `System.out.print()` 和 `System.out.println()`
- 2. `System.out.printf()` —— 格式化输出
- 3. `System.out.format()` —— 格式化输出(等同于 `printf`)
- 二、输入语句
- 1. 导入 `Scanner` 类
- 2. 创建 `Scanner` 对象
- 3. 读取不同类型的数据
- 4. 注意事项
- 三、综合示例
- 总结
在 Java 中,输入和输出是常见的操作,通常会用到标准输入输出流。我们可以通过 System.out 来进行输出,使用 Scanner 类来进行输入。
一、输出语句
Java 中的输出主要通过 System.out
来完成。System.out
是 PrintStream
类型的对象,可以调用它的多个方法来实现不同的输出需求。
1. System.out.print()
和 System.out.println()
System.out.print()
:输出数据后,不会自动换行。System.out.println()
:输出数据后,会自动换行。
详细说明:
System.out.print()
:用于连续输出多个内容时,输出内容会紧跟在一起,不添加换行符。System.out.println()
:输出完数据后,会自动追加一个换行符,使得下一次输出开始于新的一行。
public class Main {public static void main(String[] args) {System.out.print("Hello, ");System.out.print("world!"); // 输出后不换行System.out.println(" Welcome to Java!"); // 输出后换行System.out.print("This is a test.");}
}
输出结果:
Hello, world! Welcome to Java!
This is a test.
2. System.out.printf()
—— 格式化输出
printf()
是 Java 中用于格式化输出的函数,它的功能和 C 语言中的 printf()
类似。它允许你控制输出的格式,例如指定小数位数、输出宽度、对齐方式等。
常见格式化符号:
%d
:用于输出整数。%f
:用于输出浮点数,默认保留 6 位小数。%.nf
:用于指定浮点数的精度(保留 n 位小数)。%s
:用于输出字符串。%x
:输出十六进制整数。%c
:输出字符。
示例:
public class Main {public static void main(String[] args) {int num = 10;double price = 123.45678;String name = "Alice";// 输出整数System.out.printf("The number is: %d\n", num);// 输出浮点数,保留两位小数System.out.printf("The price is: %.2f\n", price);// 输出字符串System.out.printf("Hello, %s!\n", name);// 输出十六进制数System.out.printf("The number in hex: %x\n", num);}
}
输出结果:
The number is: 10
The price is: 123.46
Hello, Alice!
The number in hex: a
详细说明:
%d
用于输出整数。%.2f
用于输出浮点数并保留 2 位小数。%s
用于输出字符串。%x
用于输出十六进制表示的整数。
3. System.out.format()
—— 格式化输出(等同于 printf
)
System.out.format()
与 printf()
方法功能相同,只是名字不同。可以互换使用。
System.out.format("The number is: %d\n", num);
二、输入语句
在 Java 中,最常用的输入方法是通过 Scanner
类来进行读取。Scanner
类位于 java.util
包中,可以方便地读取不同类型的数据,如字符串、整数、浮点数等。
1. 导入 Scanner
类
要使用 Scanner
类,首先需要导入 java.util.Scanner
包。
import java.util.Scanner;
2. 创建 Scanner
对象
Scanner scanner = new Scanner(System.in);
System.in
表示从标准输入流(键盘)读取数据。
3. 读取不同类型的数据
Scanner
提供了许多方法,用来读取不同类型的输入数据:
- 读取字符串:
nextLine()
,next()
。 - 读取整数:
nextInt()
。 - 读取浮点数:
nextDouble()
。 - 读取单个字符:
next().charAt(0)
。 - 读取布尔值:
nextBoolean()
。
具体使用:
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 读取字符串(整行输入)System.out.print("Enter your name: ");String name = scanner.nextLine(); // 输入一个字符串,直到按下回车System.out.println("Hello, " + name + "!");// 读取整数System.out.print("Enter your age: ");int age = scanner.nextInt(); // 输入整数System.out.println("You are " + age + " years old.");// 读取浮点数System.out.print("Enter your weight: ");double weight = scanner.nextDouble(); // 输入浮点数System.out.println("Your weight is " + weight + " kg.");// 读取布尔值System.out.print("Are you a student? (true/false): ");boolean isStudent = scanner.nextBoolean(); // 输入布尔值System.out.println("Are you a student? " + isStudent);}
}
输入与输出:
Enter your name: John
Hello, John!
Enter your age: 25
You are 25 years old.
Enter your weight: 70.5
Your weight is 70.5 kg.
Are you a student? (true/false): true
Are you a student? true
4. 注意事项
-
nextLine()
vsnext()
:nextLine()
读取整个一行输入,包括空格。next()
只读取单个词,遇到空格时就停止。
-
输入类型不匹配:如果你输入的数据类型不匹配,
Scanner
会抛出异常。例如,如果你使用nextInt()
输入一个非数字字符,它会抛出InputMismatchException
异常。
例子:
System.out.print("Enter an integer: ");
int num = scanner.nextInt(); // 如果输入非数字,则会抛出异常
- 清理输入流:在使用
nextInt()
或nextDouble()
等方法读取数字后,如果紧接着使用nextLine()
读取字符串,可能会遇到问题。这是因为前一个nextInt()
会读取数字,但换行符(Enter
)会留在输入流中。此时可以调用nextLine()
来清理输入流中的换行符。
scanner.nextLine(); // 读取并丢弃换行符
三、综合示例
我们来写一个稍微复杂的示例,涵盖所有常见的输入输出操作。
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 获取用户基本信息System.out.print("Enter your name: ");String name = scanner.nextLine();System.out.print("Enter your age: ");int age = scanner.nextInt();// 清理换行符scanner.nextLine();System.out.print("Enter your address: ");String address = scanner.nextLine();// 获取数字信息System.out.print("Enter your height (in meters): ");double height = scanner.nextDouble();System.out.print("Enter your weight (in kg): ");double weight = scanner.nextDouble();// 计算 BMIdouble bmi = weight / (height * height);// 输出用户信息System.out.println("\n=== User Information ===");System.out.println("Name: " + name);System.out.println("Age: " + age);System.out.println("Address: " + address);System.out.printf("Height: %.2f meters\n", height);System.out.printf("Weight: %.2f kg\n", weight);System.out.printf("BMI: %.2f\n", bmi);}
}
总结
- 输出:
System.out.print()
和System.out.println()
用于输出基本数据。System.out.printf()
和System.out.format()
用于格式化输出。
- 输入:
Scanner
类用于从控制台接收输入,支持读取不同类型的数据。- 需要特别注意输入后输入流的清理,避免因换行符等问题导致后续输入错误。