输入输出和控制流程

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语句。