- Java语言程序设计
- 陆迟编著
- 1966字
- 2020-08-27 13:55:03
2.8 输入/输出初步
为了使读者尽早进行Java程序的上机实践,这里先介绍一些Java语言中有关输入和输出的基本内容。
2.8.1 标准输入/输出
1.标准输出
(1)print和println方法
从前面的例子程序中,可以看到程序中的System.out.println方法可以将常量、变量或表达式的值输出到屏幕。println方法可有0 个或1 个参数。若参数是0 个,则输出一回车换行,光标移动到下一行行首;若有一个参数,该参数可以是char、byte、int、boolean、float、double、String、char[](字符数组)和Object(对象)类型的,各种类型的数据转换成相应的字符串类型输出。println方法在输出给定内容后,输出一个回车换行。另外也常用System.out.print进行输出,print方法需要一个参数来输出,可用的参数类型与println相同,输出参数的值后不输出回车换行,因此,若输出内容本身不包含控制光标的内容或未满行,System.out.print输出后,光标将停留在输出内容后。
在实际输出时,经常需要将提示信息与变量值一起输出,但print和println方法只支持一个输出项,这时,可参考前面各例中的方法,用“+”运算符连接多个输出项为一项进行输出。例如:
设有int i = 10,j = 20; System.out.println("i= " + i + " j= " + j);// 输出为i= 10 j= 20 System.out.println(i + j); // 输出为30 System.out.println("sum= " + i + j); // 输出为sum= 1020 System.out.println("sum= " + (i + j)); // 输出为sum= 30
(2)printf和format格式输出方法
要控制输出数据的格式,可使用System.out.printf和类似的System.out.format方法,在方法的参数中对每一输出项(表达式),都可在一个格式控制字符串中用%开始的格式符进行格式控制。例如:
System.out.printf("a=%d\tb=%f\tc=%c",a,b,c); 或:System.out.format("a=%d\tb=%f\tc=%c",a,b,c);
其中的输出项为a、b和c三项,在格式控制字符串"a=%d\tb=%f\tc=%c"中有三个格式符对它们进行控制,未指出顺序时,按照自然顺序进行格式控制,即:%d控制a使其以十进制整数形式输出;%f控制b使其以十进制实数形式输出;%c控制c使其以字符形式输出。为了能得到正确输出的数据和格式,不同类型的输出项应使用不同的格式符来进行格式控制输出。常用格式符有:
%b布尔型数据 %c字符 %s字符串 %d十进制整数 %x十六进制整数 %f十进制实数(默认为六位小数) %e或%g科学记数法形式的十进制实数 %n 输出换行符 %tX用单个字符X表示需要截取日期的年、月、日、星期等组成部分
在格式字符中还可以加显示域宽、指定小数的位数和对其方式等,格式控制字符串中的其他字符,无格式控制功能,输出时将按字符原样输出。如上例中的"a="、"b="、"c="和"\t"(制表符)将按格式控制字符串中出现的位置用原意输出。需注意的是,Java的格式字符与C语言的格式字符不是100%兼容的。例如,下面的语句:
Calendar c = Calendar.getInstance(); System.out.printf("%tD,%tT,%tb%n%tc%n",c,c,c,c);
将输出:
05/03/10,16:00:08,五月 星期一 五月 03 16:00:08 CST 2010
更多的格式符和控制功能可参见APⅠ资料中关于java.util.Formatter类说明。
2.标准输入
(1)read方法
在Java中,System.in.read()方法可用于从键盘输入整数值在0~255之间的byte值(int类型)。
应用本方法时要使用Java异常处理机制,如下列程序中的throws ⅠOException。关于异常处理的知识,可见第3章和以后各章的相应章节的介绍。
【例2.9】从键盘输入一个字符,并输出它在Unicode字符集中的前一字符和后一字符。
import java.io.*; // 引入java.io包 class CharDemo { public static void main(String args[]) throws IOException{ // 抛弃异常 char c,c1,c2; System.out.println("请输入一个字符,并按回车键!"); c=(char)System.in.read(); // 输入字符 c1=(char)(c-1); c2=(char)(c+1); System.out.println(":" + c1); System.out.println(":" + c2); } }
(2)使用支持各种类型数据输入的next方法
若使用Java提供java.util.Scanner类中的各种next方法,可从键盘输入各种基本类型和字符串类型的数据。不论需从键盘输入何种类型的数据,Java从键盘接收数据都是以字符串的形式进行的,next方法要根据输入数据的类型来选用。有nextByte、nextⅠnt、nextShort、nextLong、nextFloat、nextDouble、nextBoolean和next(以空格和回车为结束标记的字符串输入)等适用于不同类型数据输入的方法。使用next方法进行键盘输入的例子如下。
【例2.10】从键盘输入三角形的三个边长,求这个三角形的面积。
import java.util.Scanner; class TriArea{ public static void main(String args[]){ System.out.printf("请输入三角形的三边长: \n"); Scanner sc = new Scanner(System.in); double a = sc.nextDouble(); double b = sc.nextDouble(); double c = sc.nextDouble(); double t = (a+b+c)/2.0; double s = Math.sqrt(t*(t-a)*(t-b)*(t-c)); System.out.format("三角形的面积为%f\n",s); } }
程序的一次运行如下:
请输入三角形的三边长:11 12 13(输入三角形的三个边长值后,按Enter键) 三角形的面积为61.481705
2.8.2 对话框输入/输出
使用对话框功能可以在程序中进行数据的输入和输出,使用对话框功能需引入相应的类:import javax.swing.JOptionPane;。
1.使用showMessageDialog(输出信息对话框)方法输出信息
Java中的JOptionPane.showMessageDialog方法是用对话框的形式来进行输出的,支持一个输出项,在输出内容较多时,也可用字符串连接的形式来输出。例如下面的程序:
【例2.11】求sin30°和cos30°的值。
import javax.swing.JOptionPane; import static java.lang.Math.*; class DialogDemo{ public static void main(String args[]){ String s1="sin30度的值="; s1 = s1 + sin(PI*30/180); s1 = s1 + "\ncos30度的值="; s1 = s1 + cos(PI*30/180); JOptionPane.showMessageDialog(null,s1); } }
它的输出结果见图2.1。
图2.1 例2.11的运行结果
2.使用showInputDialog方法输入信息
使用Java提供的javax.swing.JOptionPane类中的showⅠnputDialog方法,可从输入信息对话框中输入一个字符串。需要时,可进行类型转换,得到所需类型的输入数据。
【例2.12】使用对话框进行程序的输入/输出。输入一个代表年号的整数,求这一年的元旦是星期几?
元旦是星期几的计算公式(设年号为y,按整数运算):
s = y + (y-1) / 4- (y-1) / 100 + (y-1)/ 400;
s除以7的余数即为星期数,余数为0表示星期日。
import javax.swing.JOptionPane; class YuanDan{ public static void main(String args[]){ int s,y;
y=Integer.parseInt(JOptionPane.showInputDialog("请输入一个年号:")); s = y + (y-1) / 4- (y-1) / 100 + (y-1)/ 400; s = s % 7; JOptionPane.showMessageDialog(null,y + " 年的元旦是星期 "+ s); } }
程序运行的界面及结果见图2.2和图2.3。
图2.2 例2.12的输入
图2.3 例2.12的输出