一、比较传统的输入方法用输入流,得到字符串后要另行判断、转换
案例
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class MainRun { public static void main(String[] args) { try { BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(System.in)); System.out.println("请输入一个整数:"); String str1 = bufferedReader.readLine(); Integer int1 = Integer.valueOf(str1); System.out.println("输入的整数是:" + int1); System.out.println("请输入一个浮点数:"); String str2 = bufferedReader.readLine(); Double double1 = Double.valueOf(str2); System.out.println("输入的浮点数是:" + double1); } catch (IOException e) { e.printStackTrace(); } } }
请输入一个整数:
234
输入的整数是:234
请输入一个浮点数:
23
输入的浮点数是:23.0
二、JDK5以后有了Scanner处理控制台输入
格式1: Scanner sc = new Scanner(new BufferedInputStream(System.in));
格式2: Scanner sc = new Scanner(System.in);
在有多行数据输入的情况下,一般这样处理:
while(sc.hasNextInt()){...} 或者 while(sc.hasNext()){}
读入一个字符串: String str = sc.next();
读入一整行数据: String lineString=sc.nextLine();
读入一个布尔值: boolean boolenaNumber = sc.nextBoolean();
读入一个字节型数据: byte byteNumbe = sc.nextByte();
读入一个短整型数据: short shortNumber=sc.nextShort();
读入一个整数: int intNumber = sc.nextInt();
读入一个长整型数据: long longNumber=sc.nextLong();
读入一个单精度浮点数: float floatNumber=sc.nextFloat();
读入一个双精度浮点数: double doubleNumber=sc.nextDouble();
对于计算代码运行时间:
long startTime = System.nanoTime(); // … the code being measured … long estimatedTime = System.nanoTime() - startTime;
输入案例:
输入数据有多组,每组占2行,第一行为一个整数N,指示第二行包含N个实数
Scanner sc = new Scanner(System.in); while(sc.hasNext()){ int n = sc.nextInt(); for(int i=0;i<n;i++) { double a=sc.nextDouble(); ... }
三、输出:
输出内容:System.out.print("");
输出内容并换行:System.out.println("");
格式化输出: System.out.format(String format, Object ... args);
等价于 System.out.printf((String format, Object ... args);
各种格式化样式说明:http://www.cnblogs.com/zhangpengshou/p/3699744.html
格式化输出案例:
// System.out.printf(format, args);format为指定的输出格式,args参数 System.out.printf("%+8.3f ", 3.14); // "+"表示后面输出的数字会有正负号,正的+,负的- // ;8.3f表示输出浮点数,宽度为8,小数点保持3位有效 System.out.printf("%+-8.3f ", 3.14);// "-"表示靠左对齐 System.out.printf("%08.3f ", 3.14);// "0"8位宽度中自动补0 System.out.printf("%(8.3f ", -3.14);// "("如果是负数,自动加上( ) System.out.printf("%,f ", 123456.78); // ","金钱表示方法,每三位有一个逗号 System.out.printf("%x ", 0x2a3b); // 输出16进制数 System.out.printf("%#x ", 0x2a3b);// 输出带0x标识的16进制数 System.out.printf("老板:您名字%s,年龄:%3d岁,工资:%,-7.2f ", "ajioy", 21, 36000.00); System.out.printf("老板:您名字%1$s,年龄:%2$#x岁 ", "ajioy", 38); // "n{1}quot;表示用第n个参数
输出结果:
+3.140
+3.140
0003.140
(3.140)
123,456.780000
2a3b
0x2a3b
老板:您名字ajioy,年龄: 21岁,工资:36,000.00
老板:您名字ajioy,年龄:0x26岁
五、规格化输出
SimpleDateFormat:SimpleDateFormat是DateFormat的子类,用于格式化日期时间。
SimpleDateFormat myFmt = new SimpleDateFormat( "yyyy年MM月dd日 HH时mm分ss秒 E "); System.out.println(myFmt.format(new Date()));
输出结果:
2016年09月08日 17时34分01秒 星期四
DecimalFormat:DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。
DecimalFormat案例:
DecimalFormat df1 = new DecimalFormat("0.0"); DecimalFormat df2 = new DecimalFormat("#.#"); DecimalFormat df3 = new DecimalFormat("000.000"); DecimalFormat df4 = new DecimalFormat("###.###"); System.out.println(df1.format(12.34)); System.out.println(df2.format(12.34)); System.out.println(df3.format(12.34)); System.out.println(df4.format(12.34));
输出结果:
12.3
12.3
012.340
12.34
注意:
在线编程类名是public class Main