Java学习之旅第一季-27:输入与输出
在初学编程时,还没有比较友好的界面供用户输入和输出数据,我可以先使用JDK自带的方法,在控制台使用键盘输入以及直接在控制台输出信息到显示器上。
27.1 键盘输入
键盘是计算机中的标准输入设备,在Java中可以使用Scanner类的方法获取从控制台在用户的键盘输入。
要使用Scanner类,首先要使用类的实例化语法将该类实例化,当然使用前还要先导入它。
完整类的声明代码如下:
package com.laotan.article27;import java.util.Scanner;/*** @author 老谭*/
public class Scanner1 {static void main() {// 实例化 Scanner 类Scanner scanner = new Scanner(System.in);}
}
有了Scanner 类的实例,就可以调用它声明好的方法来获取用户输入,下面根据获取的数据类型来演示代码:
1、获取整数:调用scanner的nextInt( )方法获取int类型的整数
Scanner scanner = new Scanner(System.in);
int num1 = scanner.nextInt();
System.out.println(num1);
注意:在等待用户从键盘输入时,程序会阻塞,即会停在上述第2行代码处,只有用户在控制台输入整数后,按回车程序才会接收到用户的输入,然后赋值给前面的变量,接着就是后续代码的正常执行。
还有一个方法用于按照指定的进制获取用户输入的整数:
Scanner scanner = new Scanner(System.in);
int num2 = scanner.nextInt(8); // 按照8进制输入整数
System.out.println(num2);
如果输入的数据不是整数或不合法,就会抛出异常,如下图中输入的是1.2,但代码中获取的是int类型的整数:
2、获取浮点数:调用scanner的nexFloat( ) 或 nextDouble( )方法
Scanner scanner = new Scanner(System.in);
float num3 = scanner.nextFloat();
double num4 = scanner.nextDouble();
3、获取字符串
String s1 = scanner.next(); // 以换行或空格为结束标志
String s2 = scanner.nextLine(); // 以换行为结束标记
next( )方法和nextLine( )方法不同之处在于,前者遇到空格就会结束读取,对比下同样的输入,使用不同方法获取到的字符串差异:
使用第1行代码的next( )方法的效果如下,输入的是带有空格的字符串,结果获取到的只有空格之前的字符串。
使用第2行代码的nextLine( )方法的效果不同,输入的是带有空格的字符串,获取到的也是保留空格的字符串。
27.2 控制台输出
显示器是计算机中的标准输出设备,Java中可以使用System.out将数据输出到控制台,System.out的数据类型是PrintStream,所以使用它提供的方法就可以将数据输出到控制台。首先看两个最常用的方法 println( )和print( )方法。这两个方法我们之前见过,一个输出后有换行,另一个输出后不换行。比如:
System.out.println("Hello");
System.out.println("Laotan!");
上面两句输出的效果是分两行显示Hello Laotan!,因为第 1 行代码使用了println( )方法,输出后会自动换行。
如果换成下面的输出:
System.out.print("Hello");
System.out.print(" Laotan!");
使用 print() 方法则不会换行后,两个字符串会拼接在一起输出。
27.3 格式化输出
Java 5引入的格式字符串是以百分号(%) 开头,后面跟一个特定的字符表达不同的输出格式,用于printf( )方法中。
下表列出了常见的格式字符串:
格式字符串 | 描述 |
---|---|
%c | 单个字符 |
%d | 十进制整数 |
%f | 十进制浮点数 |
%o | 八进制数 |
%s | 字符串 |
%x | 十六进制数 |
%% | 输出百分号% |
%e | 指数形式实数 |
格式字符串使用示例:
System.out.printf("以字符输出65,结果是:%c \n",65); // 65会替换%c以字符方式输出
System.out.printf("%d \n",0x12FE); // 16进制数0x12FE替换%d以十进制数输出
System.out.printf("%.2f \n",123.456); // 123.456替换%.2f保留小数点后2位输出
System.out.printf("%e \n",100.0); // 100.0替换%e以指数形式输出
运行之后的结果如下:
以字符输出65,结果是:A
4862
123.46
1.000000e+02
printf( )方法输出后不会自动换行,所以在输出的字符串最后加了转义字符 \n 达到换行的目的。
27.4 小结
本小节介绍了Java控制台输入输出方法。使用Scanner类实现键盘输入,包括nextInt()获取整数、nextFloat()/nextDouble()获取浮点数、next()/nextLine()获取字符串。控制台输出通过System.out的print()和println()方法实现,前者不换行后者换行。还讲解了格式化输出,使用printf()配合%c、%d、%f等格式字符串实现不同类型数据的格式化显示。