輸入輸出和控制流程
1、輸入輸出
1.1 控制臺的輸入:通過控制臺輸入,需要構造一個Scanner對象,並與標準輸入流System.in關聯。
如:Scanner in = new Scanner(System.in);
1.2 可以使用Scanner的nextLine讀取一行數據,用next讀取一個字符串,用nextInt讀取一個整數等
1.3 Scanner不適用從可控制臺讀取密碼,java SE 6特別引入瞭Console類實現這個目的。
如: Console con = System.console();
char[] password = con.readPassword("password: "); //安全起見,將密碼放到字符數組中,而不是字符串;處理後應該對馬上用填充值覆蓋數組元素。不過不如scanner方便,每次隻能讀一行數據,而不是一個數值或單詞。
1.4 格式化輸出:java SE5.0 沿用瞭c語言庫函數中的printf方法。
如:System.out.printf("a is %d, b is %s", age, name);
1.5 後面跟的參數索引是從1開始,象上例中的age的索引為1,name的索引為2;而且可以使用<標志來使用前一個參數將被使用
如: System.out.printf("%1$s %2$tB %2$te %2$tY", "Due date:", new Date());
System.out.printf("%s %tB %<te %<tY", "Due date:", new Date());
輸出為:Due date: February 9 2004
1.6 可以使用靜態的String.format方法創建一個格式化字符串
如: String message = String.format(("a is %d, b is %s", age, name);
1.7 文件輸入與輸出
1.7.1 對於文件進行讀取,就需要一個用File對象構造一個Scanner對象
如:Sanner in = new Scanner(new File("myfile.txt"));
★可以構造一個字符串的Scanner,但是此時將字符串解釋為數據,而不是文件名。
1.7.2 對文件寫入,就需要構造一個PrintWriter對象,隻需要提供文件名。
如:PrinterWriter out = new PrinterWriter("myfile.txt");
★如果用一個不存在的文件構造Scanner或用一個不能創建的文件構造PrinterWriter對象,則會跑出一個異常。
2、控制流程
2.1 塊作用域:由花括號括起來的若幹條簡單的java語句。它確定瞭變量的作用域;一個塊可以嵌套在另一個塊中。而且不能在嵌套的兩個塊中聲明同一個變量,這個c++是不同的。
2.2 使用條件語句、循環語句等,可以使用塊將原本放一條語句的地方放多條語句。
2.3 使用循環,檢測兩個浮點數是否相等格外小心。
如:for(double x = 0; x != 10; x += 0.1) //該循環將為死循環,因為0.1無法精確地用二進制表示。
2.4 如果在for語句內部定義一個變量,則在循環外部無法使用。
如:for(int i = 0; i < 10; i++){} // i無法在外部使用,如使用需要在循環外定義
2.5 另個獨立的循環可以定義同名的變量
如:for(int i = 0; i < 10; i++){} for(int i = 11; i < 20; i++){} // 這是允許的
2.6 對於switch語句,如果case後面沒有break語句,則將繼續觸發下一個case的處理,這是很危險的,所以避免使用switch語句。