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()接收了回車鍵,如果緩存區是空的會讓你輸入內容,所以,你應該明白了為什么你沒有輸入程序就結束了的原因了吧。
好啦,今天就寫這么多。
我很想用心打造精品,但限於知識和語言表達能力,其中必有很多不足,望大家海涵啊。