输入和输出是计算机最基本的功能,Java也提供了多种方式完成输入输出,本篇主要分享最基础,最常用的。
输入(Scanner类)
Scanner 是 Java5 的新特征,在java.util包里,可以完成用户输入,使用如下:
1. 导入java.util包;
2. 构造Scanner对象,参数为标准输入流http://System.in;
3. 使用next()方法系列接收数据;常用方法如下:
- String nextLine()
接收输入的一行内容(以回车作为分隔符)
- String next()
接收输入的一个单词(以空格作为分隔符)
- int nextInt()
- double nextDouble()
接收输入的一个整数或浮点数
- boolean hasNext()
检测是否还有单词输入
- boolean hasNextInt()
- boolean hasNextDouble()
检测输入中是否整数或浮点数
package BaseCode;
import java.util.Scanner; //导入Scanner的包
public class code2_0 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);//构建一个Scanner对象
System.out.print("输入数据:");
String s1 = sc.next(); // 接收一个单词,空格分隔
System.out.println("接收的单词s1:"+s1);
String s2 = sc.nextLine(); // 接收一行字符串
System.out.println("接收的一行字符串s2:"+s2);
System.out.print("输入整数:");
if (sc.hasNextInt()) {// 判断输入的是否是整数
int i = sc.nextInt(); // 接收整数
System.out.println("整数数据i:" + i);
}
else {// 如果输入的不是整数
System.out.println("输入的不是整数!");
}
System.out.print("输入小数:");
if (sc.hasNextDouble()) {// 判断输入的是否是小数
Double f = sc.nextDouble(); // 接收小数
System.out.println("小数数据f:" + f);
}
else {
System.out.println("输入的不是小数!");
}
sc.close(); //关闭Scanner对象
}
}
运行结果
输入数据:This is Java code
接收的单词s1:This
接收的一行字符串s2:is Java code
输入整数:23
整数数据i:23
输入小数:12.36
小数数据f:12.36
几点说明:
1. next()不接收带空格的字符串,输入字符串前面的空格next()会去掉,后面的空格作为分隔符或者结束符。
2. 当输入多个数据时,第一个next()接收到数据,下一个next()发现字节流里面有东西,就不会阻塞等待输入了,会直接接收。
- 如上例中,输入“This is Java code” ,s1用next()只接受一个单词“This”,s2用nextLine()接收了剩余的部分。
3. 要输入 int 或 float /double类型的数据,最好先使用 hasNextXxx() 方法进行验证。
4. Scanner对象用完最后用close()关闭掉,不然会告警。
输出(print,println,printf)
System.out.print():是最常用的输出语句,它会把括号里的内容转换成字符串输出到输出窗口(控制台)。
System.out.println():与print()基本一样,区别就是输出完成后执行换行。
System.out.printf():这个方法延续了C语言的输出方式,通过格式化文本和参数列表输出。
重点说一下printf(),这个方法能按照我们的需求进行格式化的输出,如输出要控制小数的位数、数字前补0、输出对齐、加分隔符等等。
基本格式:两个参数,第一个是格式控制符,第二个可变长,表示待输出数据对象。
System.out.printf(“格式控制”,表达式1,表达式2,……,表达式n)
每个格式控制以%开始,后跟被格式化的数值类型,如:%d表示int型。输出时每个格式控制都用后面相应位置的表达式值替换。
分两个部分说明:
1. 常用的格式控制符(字符数值类):
package BaseCode;
public class code2_1 {
public static void main(String[] args) {
String name="时光与字节";
int nl=18;
double cj=98.675;
System.out.printf("字符串:%s;%n数字:%d;%n小数(默认六位):%f",name,nl,cj);
System.out.printf("%n整数留五列不足前面添零:%05d",nl);
System.out.printf("%n小数点后留两位:%.2f",cj);
System.out.printf("%n整数八进制输出:%o",nl);
System.out.printf("%n小数共6列,小数点后1位:%06.1f",cj);
System.out.printf("%n前加正号、千位分隔符:%+,.2f",36521.254);
}
}
运行结果
字符串:时光与字节;
数字:18;
小数(默认六位):98.675000
整数留五列不足前面添零:00018
小数点后留两位:98.68
整数八进制输出:22
小数共6列,小数点后1位:0098.7
前加正号、千位分隔符:+36,521.25
2. 时间日期类格式化输出
%t表示格式化日期时间类型,%T是时间日期的大写形式,在%t之后用特定的字母表示不同的输出格式 。下表只列出常用的日期类控制符。
package BaseCode;
import java.util.*;
public class code2_2 {
public static void main(String[] args) {
System.out.printf("%tF\n",new Date());
System.out.printf("%tT\n",new Date());
System.out.printf("%tr\n",new Date());
System.out.printf("%tY\n",new Date());
System.out.printf("%ty\n",new Date());
System.out.printf("%tm\n",new Date());
System.out.printf("%td\n",new Date());
System.out.printf("%ta\n",new Date());
System.out.printf("今天是:%1$ty年%1$tm月%1$td日,%2$s", new Date(),"J_ZHANG");
//%后是数字是后面被格式化的数值索引,从1开始,以$结束。
//如:new Date()是第一个,索引为1。
}
}
运行结果
2019-10-07
21:47:38
09:47:38 下午
2019
19
10
07
星期一
今天是:19年10月07日,J_ZHANG
实验内容:
a.编写一个java应用程序PrintLetters.java,输出俄文字母表。
提示:俄文的第一个字符是’а',最后一个字符是:’я’
public class Russia {
public static void main(String args[]){
char A='а',B='я';
System.out.println("打印俄文字母表:\n");
for(int i=(int)A;i<=(int)B;i++){
System.out.print(" "+(char)i);
}
}
}
b.编写一个程序,使用while循环计算1~1000之间能被3和7同时整除的整数之和。
public class Sum {
public static void main(String args[]){
int sum=0;
for(int i=1;i<=1000;i++){
if(i%3==0&&i%7==0){
sum+=i;
}
}
System.out.print(sum);
}
}
c.编写一个程序,使用for循环计算8+88+888+8888+…的前十项之和。
public class Sum {
public static void main(String args[]){
int sum=0,temp=0;
for(int i=0;i<10;i++){
temp=temp*10+8;
sum+=temp;
}
System.out.print(sum);
}
}
d.通过键盘输入(java.util.Scanner),声明并初始化一个圆柱体的高和底面半径,PI值是Math.PI,显示输出圆柱体的体积。
import java.util.Scanner;
public class Volume {
public static void main(String args[]){
double R=0,H=0,V=0;
Scanner reader=new Scanner(System.in);
H=reader.nextDouble();
R=reader.nextDouble();
V=2*Math.PI*R*H;
System.out.print(V);
}
}
import java.util.Scanner;//就是导入 java.util 包下的 Scanner 类,导入后才能使用它。
public class d {
public static void main(String[] argn){
double r,h,pi,volume;
Scanner input=new Scanner(System.in);
System.out.println("请输入圆柱的高和半径:");
if(input.hasNextDouble()){//在键盘中依次输入若干个数字,每输入一个数字都需要按回车键确认,最后在键盘输入一个非数字字符串结束整个输入操作过程。
h=input.nextDouble();
r=input.nextDouble();
pi=Math.PI;
volume=pi*h*r*r;
System.out.println("圆柱的体积是:"+volume);
}
else {
System.out.println("如如不匹配,请输入数字");
}
}
}