三种结构:
-
单选
-
二选一
-
n选一
if(条件表达式){
执行表达式;
}else if(条件表达式){
执行表达式;
}else{
执行表达式;
}
从键盘获取不同类型变量
-
使用Scanner类
注意:需要根据相应的方法来输入指定类型的值;
如果值的类型不匹配,会报异常InputMisMatchException,程序终止。
调用方法获取输入值
-
方法:nextXxxx(1st letter capital)String类型 next()
-
Scanner没提供没有单独获取char的方法。可以用String.charAt(0);来获取char
int num = scan.nextInt();
提示用户输入的信息
*java中不可以使用连续比较
80 < score <= 90; // wrong, 执行之后,前面是一个bool,无法和90进行比较!
会执行
*如果if, else if, else的执行语句只有一行,{ }可省略!但不建议省略
标红的语句是独立存在的(因为上一个if-else结构没有加{ }),
不属于if(y>2)结构,所以无论(y > 2)满足与否,都会执行红色语句!
配对的就近原则:
-
没有{ }的if语句只能包含下面一行,但如果下一行还是if,那么就再包含一行,所以println(x + y)属于if结构!
-
else与离它最近的if匹配,这个例子下是与(y > 2)配对,所以结果会输出(X is 4)
产生随机数(10 - 99):
(0<= random < 1)
-
99 - 10 + 1 确认乘积
-
加上下限,获得目标区间
-
a,b 为闭区间
-
根据公式,获得的区间是[a, (b+1).0) 因此只能取到b.99999,永远取不到b+1. 强转为int之后,最大为b
判断String是否为特定值:
String s1;
S1.equals("是");// or S1 == "是";
Switch-Case
*Get a char form user input: get a single string first and then transferred into a char!
相当于每个case之后没有语句及break,直到case5或者case10才执行然后break!
循环结构:
FOR:
System.out.print() // print at the same line
System.out.println() // print at individual line
初始化条件的作用域:
但是如果在Global环境下定义了i,在for循环内再定义i会编译不通过!
输出混合:
System.out.print() 可以让不同的输出结果显示在同一行,中间没有空格!
System.out.print("hello");
System.out.print("world");
// helloworld
While:
-
-
-
-
-
For 循环定义的初始化条件是local var,出了循环不可以调用
-
While循环定义的是Global变量,可以随便调用
-
-
-
-
-
初始化条件 2. 循环条件 3. 循环体 4. 迭代条件
Do -while:
while(true) == for(;;)
嵌套循环
-
一般不超过3层
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()
特殊关键字
带
标签的Break/ Continue, 结束
指定的循环!