输入输出和控制流程
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语句。