本課要點及難點:
分支:if; if else; if else if
注:在java中,花括號如果不寫會默認只執行第一行!切記!!!
開關語句:switch case
循環語句:for;while;do while
1.不同的類型的值的運算結果,以大的爲標準(參考上一篇中的數據類型),數據類型一致時,結果類型不變(注:八種基本數據類型和String相加必得String值,特殊類型後續再討論,這裏不展開)
如int類型的值與double型相加減得到的必然是double值
2.關係運算結果爲boolean值
關係運算符:>,<,==,>=,<=,!=
注:這裏的==有疑問沒關係,請往下看,下面的 賦值 中會講到
3.邏輯運算
&& and|| 或
4.或運算和與運算
轉爲二進制,按邏輯表計算
5.非運算~
1爲0,0爲1(0:-1 1:-2以此類推)
6.異或 ^
a^b(相同取0,不同取1)
7.左移右移(正負號,>>>不考慮符號)
8.優先級
1.()
2.一元(-、--、++、!)
3.二元(算數、關係、邏輯)
4.三元(表達式1?表達式2:表達式3)
eg:
public static void main(String[] args) {
int i=3;
System.out.println("測試結果是:"+(i==1?"條件1爲真":"條件1爲假"));
}
此處輸出的結果是:測試結果是:條件1爲假;因爲:三元表達式中,若表達式1爲真,就返回表達式2,否則返回表達式3,顯然此處的i不等於15.賦值
在java中,“=”用於賦值,然後出現一個問題,那就是如何判斷兩個值是否相等呢?爲了解決這個問題,我們規定,判斷兩個值是否相等時我們採用兩個=,即“==”,這也是上文中留下的問題
9.分支語句
if(){}
if(){} else{}
if(){} else if(){}
if(){} else if(){} else{}
我們先看一個案例:
public static void main(String[] args) {
int score =90;
if(score<60){
System.out.println("不及格");
}
if(score>60){
System.out.println("及格");
}
if(score>75){
System.out.println("良好");
}
if(score>85){
System.out.println("優秀");
}
}
此段代碼執行的結果並非我們所想的“優秀”,實際結果是:
及格
良好
優秀
一共三個結果,出現三個結果的原因我們可以從代碼中尋找原因:
當進入第二個判斷時,i滿足條件,打印出“及格”,第三個判斷依然滿足,第四個亦然,出現這個情況的原因是我們的分支語句安排的有問題,if成了並列平級的關係,沒有高低級之分,說起來有點抽象,我們通過下面修改後的代碼再看:
public static void main(String[] args) {
int score =90;
if(score<60){
System.out.println("不及格");
}
else if(score>60){
System.out.println("及格");
}
else if(score>75){
System.out.println("良好");
}
else{
System.out.println("優秀");
}
}
此段代碼執行的實際結果是:
及格
當然結果肯定不是我們期望的“優秀”,但是我們可以通過這個來更加深入地理解if與else if 及 if 的關係,此段代碼中,執行到第二個判斷時發現滿足條件就不再向下執行判斷了,所以出現了這個結果,當然,這個案例只是爲了更好理解分支語句,實際操作中爲了提高效率,我們可以不需要嵌套這麼多的分支,可以通過合理地安排閾值來實現相同的功能,此處可以作爲一個作業。
10.for(表達式1;表達式2;表達式3) { 循環體 }
表達式1:初始條件(再循環體開始執行前執行)
表達式2:每次循環的判斷條件boolean
表達式3:循環體結束後再執行
eg:
public static void main(String[] args) {
for(int i=0;i<10;i++){
System.out.println("我真帥");
}
}
此段代碼執行結果是十個“我真帥”,因爲i從0開始,每執行一次就會自己加1,再進行判斷是否依然小於10,顯然從0到9一共是10個數字,即執行了十次
注:for(;;)或者for(表達式1;;表達式3)是死循環
這裏可以自己寫代碼測試一下,此處不再舉例
1.while(布爾值){循環體}先判斷,再執行
2.do{循環體}while(布爾值);先執行,再判斷
看兩個案例:
eg1:
public static void main(String[] args) {
boolean flag=false;
while(flag){
System.out.println("我真帥");
}
}
運行代碼之後什麼也不會發生,因爲死循環的條件不滿足,所以不會執行循環體
eg2:
public static void main(String[] args) {
boolean flag=false;
do{
System.out.println("我真帥");
}while(flag);
}
此處的代碼會先執行一遍,然後再檢查條件是否滿足,所以會出現一行“我真帥”,然後就沒有然後了
結束循環的關鍵字:
continue: 結束本次
break:結束本層
return:結束方法
分別看如下案例:
continue案例:
public static void main(String[] args) {
for(int i=0;i<3;i++){
System.out.println("循環體開始");
if(i==1){
continue;
}
System.out.println("循環體結束");
}
}
運行結果:
循環體開始
循環體結束
循環體開始
循環體開始
循環體結束
觀察標記出來的那句話,並沒有下面的一句:循環體結束,因爲滿足continue的條件:i=1,也就是說continue中斷的是本次循環,然後其它的繼續走,這也是continue的本意:繼續
break案例:
public static void main(String[] args) {
for(int i=0;i<3;i++){
System.out.println("循環體開始");
if(i==1){
break;
}
System.out.println("循環體結束");
}
System.out.println("**主方法結束**");
}
這段代碼運行的結果是:循環體開始
循環體結束
循環體開始
**主方法結束**
通過結果我們可以看出,遇到break之後,break所在的那個循環不再繼續了,直接跳到了主方法裏面(可以理解爲到了跟循環沒關係的事情裏)
建議自己多動手敲一敲代碼,這樣會加深理解!
最後一個return案例:
public static void main(String[] args) {
public static void main(String[] args) {
for(int i=0;i<3;i++){
System.out.println("循環體開始");
if(i==1){
return;
}
System.out.println("循環體結束");
}
System.out.println("**主方法結束**");
}
運行結果:
循環體開始
循環體結束
循環體開始
可以看出,一旦遇到了return,整個方法就停止了,後續我們會繼續瞭解return的其他更重要的用法,此處不做展開,但補充一點,return放置的位置很敏感,建議多寫代碼多感受
switch(表達式){
case 常量:方法;break;
.
.
.
}
表達式:可爲byte,short,int,char.jdk1.7以上版本支持String
switch case又叫“開關語句”,爲什麼叫開關語句呢?我們來看一個案例:
public static void main(String[] args) {
int score = 50;
switch (score) {
case 50:
System.out.println("score是:50");
case 60:
System.out.println("score是:60");
case 70:
System.out.println("score是:70");
}
}
運行結果是:
score是:50
score是:60
score是:70
簡單解釋一下:switch後面的括號就是鎖孔,括號裏的東西對應的就是下面case裏的不同鎖芯,上面給定了一個鎖芯是50,到了下面一個個試,第一個就對了,然後進開了門,但是!並沒有給出口,所以就一直走下去,走到了程序結束,也就出現了上面所示的結果,我們對代碼進行一些修改,變成如下:
public static void main(String[] args) {
int score = 50;
switch (score) {
case 50:
System.out.println("score是:50");
break;
case 60:
System.out.println("score是:60");
break;
case 70:
System.out.println("score是:70");
break;
}
}
也就是每個門進去後加了個break,不理解的就跳到上面去看一下break的意義。這樣就不會出現上述情況了。當然還有一個default沒有舉例,你可以自己動手,defaultd 的意義是除了上述case中的其他所有情況,就執行****。
本節課作業是利用分支語句及循環語句打印出下圖所示的乘法口訣表:
1X1=1
1X2=2 2X2=4
1X3=3 2X3=6 3X3=9
1X4=4 2X4=8 3X4=12 4X4=16
1X5=5 2X5=10 3X5=15 4X5=20 5X5=25
1X6=6 2X6=12 3X6=18 4X6=24 5X6=30 6X6=36
1X7=7 2X7=14 3X7=21 4X7=28 5X7=35 6X7=42 7X7=49
1X8=8 2X8=16 3X8=24 4X8=32 5X8=40 6X8=48 7X8=56 8X8=64
1X9=9 2X9=18 3X9=27 4X9=36 5X9=45 6X9=54 7X9=63 8X9=72 9X9=81
難點提示:可以考慮利用雙層循環,第一層控制行,第二行控制列
以上!
ps:未經許可,請勿轉載