Java 流程控制

Java 流程控制                                 Java 流程控制
 
Java 流程控制
三种结构:
  • 单选
  • 二选一
  • n选一
if(条件表达式){
    执行表达式;
}else if(条件表达式){
    执行表达式;
}else{
    执行表达式;
}

从键盘获取不同类型变量

  • 使用Scanner类
Java 流程控制
注意:需要根据相应的方法来输入指定类型的值;
如果值的类型不匹配,会报异常InputMisMatchException,程序终止。
调用方法获取输入值
  • 方法:nextXxxx(1st letter capital)String类型 next()
  • Scanner没提供没有单独获取char的方法。可以用String.charAt(0);来获取char
int num = scan.nextInt();
 
提示用户输入的信息
Java 流程控制
 
*java中不可以使用连续比较 
80 < score <= 90; // wrong, 执行之后,前面是一个bool,无法和90进行比较!
 
Java 流程控制会执行
 
*如果if, else if, else的执行语句只有一行,{ }可省略!但不建议省略
Java 流程控制
标红的语句是独立存在的(因为上一个if-else结构没有加{ }), 不属于if(y>2)结构,所以无论(y > 2)满足与否,都会执行红色语句!
 
配对的就近原则
Java 流程控制
  • 没有{ }的if语句只能包含下面一行,但如果下一行还是if,那么就再包含一行,所以println(x + y)属于if结构!
  • else与离它最近的if匹配,这个例子下是与(y > 2)配对,所以结果会输出(X is 4)
产生随机数(10 - 99)
Java 流程控制
(0<= random < 1)
Java 流程控制
  • 99 - 10 + 1 确认乘积
  • 加上下限,获得目标区间
Java 流程控制
  • a,b 为闭区间
  • 根据公式,获得的区间是[a, (b+1).0) 因此只能取到b.99999,永远取不到b+1. 强转为int之后,最大为b
 
判断String是否为特定值
String s1;
S1.equals("是");// or S1 == "是";
 

Switch-Case
Java 流程控制                           Java 流程控制
Java 流程控制
 
*Get a char form user input: get a single string first and then transferred into a char!
Java 流程控制
Java 流程控制
Java 流程控制
相当于每个case之后没有语句及break,直到case5或者case10才执行然后break!
Java 流程控制

 
循环结构
Java 流程控制
FOR
Java 流程控制                 Java 流程控制
 
System.out.print() // print at the same line
System.out.println() // print at individual line
 
初始化条件的作用域
Java 流程控制
但是如果在Global环境下定义了i,在for循环内再定义i会编译不通过!
 
输出混合
System.out.print() 可以让不同的输出结果显示在同一行,中间没有空格!
System.out.print("hello");
System.out.print("world");
// helloworld
 

While:
Java 流程控制     Java 流程控制
          • For 循环定义的初始化条件是local var,出了循环不可以调用
          • While循环定义的是Global变量,可以随便调用                      
  1. 初始化条件 2. 循环条件 3. 循环体 4. 迭代条件                      
Java 流程控制
 

Do -while:
Java 流程控制                          Java 流程控制
 

while(true) == for(;;)
Java 流程控制
 
嵌套循环
  • 一般不超过3层
Java 流程控制Java 流程控制
 
Java 流程控制
 

E.g.
找2到100的所有质数。最小质数:2
Hint
  • use a flag to determine is i % j == 0 or not
  • refresh flag when flag changed
优化
  • break 只对本身非质数的自然数有效,一旦发现可除尽,不需要再去看后面的;但如果本身是质数,还需要验证每一个!
  • j <= Math.sqrt(i) 
    • c = a*b, a == b 是break point,开方之后只需要考虑一般的数字,如果前一般可以除尽,后一般一定有对应的数,不需要两边都考虑。
    • 对本身是质数的自然数起到了作用
针对 变量不能重复定义的问题:
  • 同一作用域中可以反复定义
  • 如果global中定义了,local中不可再定义!
获取当前时间
  • Long 型 现在到1970年midnight的毫秒数
  • long var = System.currentTimeMillis()

特殊关键字
Java 流程控制
 
标签的Break/ Continue, 结束 指定的循环!
Java 流程控制