輸入輸出和控制流程
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無法在外部使用,如使用需要在循環外定義