java的print,printf,println以及输入
java中有三种方式向控制台输入信息,分别是print,printf,println,现在简单介绍一下他们之间的异同。
- printf主要是继承了C语言的printf的一些特性,可以进行格式化输出
- print就是一般的标准输出,但是不换行
- println和print基本没什么差别,就是最后会换行
看一下他们的效果:
print:
结果:
从结果中可以明显看到,print输出内容之后,不会换行,光标定到最后一个字符之后。
println:
结果:
可以看到,每次执行完println之后,光标都会自动定位到下一行。
看看《Head First Java》怎样区别它们的?
还是很好区分的。
如果你学过c语言,对printf应该很是了解啦,我在这里再重复一遍。
什么是格式化输出呢?格式化输出就是向指定的地方(如:屏幕)输出指定格式的内容。
不同的语言对数据的格式化的表达形式稍微有点差别,java中一些数据的格式化形式:
'd' 整数 结果被格式化为十进制整数
'o' 整数 结果被格式化为八进制整数
'x', 'X' 整数 结果被格式化为十六进制整数
'e', 'E' 浮点 结果被格式化为用计算机科学记数法表示的十进制数
'f' 浮点 结果被格式化为十进制数
'g', 'G' 浮点 根据精度和舍入运算后的值,使用计算机科学记数形式或十进制格式对结果进行格式化。
'a', 'A' 浮点 结果被格式化为带有效位数和指数的十六进制浮点数
第一种的颜色是之适用整形,红色只适应浮点型,我为什么说这个呢?在c语言中能自动强制类型转换,所以,类型不对,程序也能正常运行,但在java中,类型不对程序就不能运行。我会在后边举例的。
再给从c语言阵营的一个小提醒:float 数据后必须跟 “f”,否则java会把数据看成double类型。
举几个具体的例子展示一下java的各种格式化的输出:
1 public class Test{ 2 public static void main(String[] args) { 3 int i = 10; 4 float f = 10.0f; 5 double d = 10.0; 6 System.out.printf("%d %#o %#x \n", i, i, i);//你可以去掉#号试试效果 7 System.out.printf("%e %f %g %a \n", f, f, f,f); 8 System.out.printf("%e %f %g %a \n", d, d, d,d); 9 } 10 }
看看效果:
下边举个错误的例子:
1 public class Test{ 2 public static void main(String[] args) { 3 int i = 10; 4 System.out.printf("%e \n",i); 5 } 6 }
看看会出现什么错误:
不合法类型转换异常,所以,写程序时要对号入座啊。
print, printf, println就说这么多啦,下边介绍一下从从控制台输入数据的方式,以后会在IO输入/输出时再详细介绍java的输入。
输出我们用的是System.out,那么又没有System.in呢?哈哈,有是有,但System.in只能获取字节,我们要想获得数字和字符串直接调用System.in是不能实现的,如果可以,你可以自己写个类封装一下System.in,实现获取数字与字符串的接口。你可能已经想到啦,java已经提供了这样的类:Scanner,你可以通过Scanner对象获取各种数据。
1 import java.util.Scanner; 2 public class Test{ 3 public static void main(String[] args) { 4 Scanner s = new Scanner(System.in);//System.in作为Scanner构造函数的参数 5 System.out.println(s.nextLine());//nextLine获取输入的数据直到遇见回车键,回车键也会接受 6 System.out.println("over"); 7 } 8 }
一定要注意那个注释部分回车键也会接受,否则会进入到一个小坑里呦,举个例子:
import java.util.Scanner; public class Test{ public static void main(String[] args) { Scanner s = new Scanner(System.in);//System.in作为Scanner构造函数的参数 int i = s.nextInt(); System.out.println(i); System.out.println("please input a word:");//输入一个单词 String str = s.nextLine(); System.out.println(str); System.out.println("over"); } }
看结果:
没有输入单词程序就结束啦,为什么呢?当你输入“100”数字时,敲回车结束,nextInt()函数不会接受回车键,但nextLine会接受缓存区里的数据和回车键,此时缓存区有个回车键,所以nextLine()接收了回车键,如果缓存区是空的会让你输入内容,所以,你应该明白了为什么你没有输入程序就结束了的原因了吧。
好啦,今天就写这么多。
我很想用心打造精品,但限于知识和语言表达能力,其中必有很多不足,望大家海涵啊。