Java学习笔记Day2:流程控制
1.流程控制
1.1 流程控制的定義
流程控制是用來控制程序中各語句的執行順序
流程圖:逐步解決指定問題的步驟和方法的一種圖形化表示方法
1.2選擇結構
1.2.1定義
選擇結構是根據條件判斷結果選擇不同的處理
1.2.2語法
語法:if(表達式){},表達式必須是布爾值
1.2.3示例
Q1:張浩Java成績大于90分,老師獎勵他iPhoneX ,該怎么做呢?(基本if)
Scanner s = new Scanner(System.in); System.out.print("請輸入成績:"); double javaScore = s.nextDouble(); if(javaScore > 90){//代碼塊System.out.println("獎勵愛瘋X"); } System.out.println("獎勵之后");Q2:張浩Java成績大于90分,并且音樂成績大于80分時,或者Java成績等于100分,音樂成績大于70分時,老師獎勵他,該怎么做呢?(復雜條件下的if選擇結構)
Scanner s = new Scanner(System.in); System.out.print("請輸入JAVA成績:"); double javaScore = s.nextDouble(); System.out.print("請輸入C++成績:"); double cScore = s.nextDouble(); if((javaScore > 90 && cScore > 80) || (javaScore == 100 && cScore > 70)){//代碼塊System.out.println("獎勵愛瘋X"); } System.out.println("獎勵之后,洗洗睡吧");結合運算符的優先級編寫條件
最高的優先級:( )
最低的優先級:=
優先級:!> 算術運算符 > 關系運算符 > && > ||
復雜條件使用括號提高可讀性
Q3:如果張浩Java考試成績大于90分,老師就獎勵他一個iPhone5 ,否則老師就罰他蹲馬步(使用if-else選擇結構)
Scanner s = new Scanner(System.in); System.out.print("請輸入成績:"); double javaScore = s.nextDouble(); if(javaScore > 90){//代碼塊System.out.println("獎勵愛瘋X"); }else{System.out.println("罰在學校門口抱電線桿,大叫我是笨蛋"); } System.out.println("獎勵之后");只有一條語句時,建議不省略{ }
Scanner s = new Scanner(System.in); System.out.print("請輸入成績:"); double javaScore = s.nextDouble(); if(javaScore > 90)System.out.println("獎勵愛瘋X"); elseSystem.out.println("罰在學校門口抱電線桿,大叫我是笨蛋"); System.out.println("獎勵之后");Q1:對學員的結業考試成績評測,成績>=80 :良好 ,成績>=60 :中等,成績<60 :差(多重if結構)
多重if選擇結構中各個條件的順序可以任意排列嗎?
Note:
- 使用多重if選擇語句處理問題時需要注意順序,從大到小或者從小到大
- If只能在第一位,且必須有一個
- Else只能在最后一位,且最多一個
- Else if在中間,可以有若干個(0-n)
- If-else if-else:是由上往下依次判斷,匹配第一個結果為true的,執行該代碼塊,代碼塊執行完畢后,跳出。
- If嵌套:是為了讓代碼的可讀性更高,邏輯更清楚
- 在單個代碼塊當中,某一次嵌套,最好不要超過三層,如果超過,檢查邏輯
Q5:學校舉行運動會,百米賽跑跑入10 秒內的學生有資格進決賽,根據性別分別進入男子組和女子組 (嵌套if)
嵌套if控制語句可以通過外層語句和內層語句的協作,增強程序的靈活性
Scanner s = new Scanner(System.in); System.out.print("請輸入成績:"); int time = s.nextInt(); System.out.print("請輸入性別:"); String sex = s.next(); //1.先判斷性別 // if("男".equals(sex)){ // if(time < 10){ // System.out.println("男子決賽"); // } // }else{ // if(time < 10){ // System.out.println("女子決賽"); // } // }//2.請問,這么寫對嗎? // if("男".equals(sex) && time < 10){ // System.out.println("男子決賽"); // }else if("女".equals(sex) && time < 10){ // System.out.println("女子決賽"); // }else{ // System.out.println("淘汰"); // }//3.邏輯清晰明了(if嵌套---->三目) if(time < 10){ // if("男".equals(sex)){ // System.out.println("男子決賽"); // }else{ // System.out.println("女子決賽"); // }String r = "男".equals(sex)?"男子決賽":"女子決賽";System.out.println(r); }else{System.out.println("淘汰"); }Q6:韓嫣參加計算機編程大賽,如果第一名,參加麻省理工大學組織的1個月夏令營,如果第二名,獎勵惠普筆記本電腦一部,如果第三名,獎勵移動硬盤一個,否則,不給任何獎勵 (Switch結構)
解決方法:使用多重if選擇結構實現,缺點:結構復雜,啰嗦;使用switch選擇結構解決,特點:條件為等值判斷
Switch的注意點:
- 條件不是布爾類型,除了long以外的整形+枚舉+(JDK1.7以后的String)+char
- 比較的一定常量等值判斷,且常量不可重復
- Break:防止穿透
- 每一個case是一個獨立的作用域
- 無需依次比較,一次找到目標
- Default:當所有條件都不滿足的時候,執行default,可以有,也可以沒有;可以在任何位置;但是通常來說,我們習慣性將其放在首位或者末尾;如果不是末尾,一般需要加上break;
比較switch和多重if選擇結構:
- 相同點:都是用來處理多分支條件的結構
- 不同點:switch選擇結構:只能處理等值條件判斷的情況;多重if選擇結構:沒有switch選擇結構的限制,特別適合某個變量處于某個連續區間時的情況
1.3循環結構
1.3.1循環的作用
案例1:張浩Java考試成績未達到自己的目標。為了表明自己勤奮學習的決心,他決定寫一百遍“好好學習,天天向上!”
//固定次數的 int i = 0;//初始化變量 while(i < 100){//判斷條件System.out.println("第"+i+"次");//循環體i ++;//迭代 } //0-99次:希望大家開始習慣從0開始數數案例2:打印50份試卷,10000米賽跑,做100道編程題
1.3.2循環的四要素
① 初始化變量:從哪開始
② 判斷條件:到哪結束
③ 循環體:是循環執行的主要內容
④ 迭代:無限向目標趨近
1.3.3while循環
while循環,當條件不滿足時,一次也不執行;先判斷,再執行。
1.3.1do-while循環
當條件不滿足時,至少執行一次;先執行,再判斷。
int i = 100000;//初始化變量 do{System.out.println("第"+i+"次");//循環體i ++;//迭代 }while(i < 100);while循環和do-while循環的區別
先判斷,再執行;先執行,再判斷,do-while循環不管任何情況都至少執行一次
1.3.1for循環
循環次數固定,for比while更簡潔
for(int i = 0 ; i < 100 ; i ++){System.out.println(i); }1.3.5循環詳解
倒序:
// int i = 100;// while(i > 0){ // System.out.println(i); // i --; // }// do{ // System.out.println(i); // i --; // }while(i > 0);// for(int i = 100; i > 0 ; i --){ // System.out.println(i); // }步長設置:
// int i = 0; // while (i < 100){ // System.out.println(i); // i += 10;//一次迭代10 // }條件設置:
// int i = 0; // for(;i < 100;){ // System.out.println(i); // i ++; // }// for(int i = 1,j = 100;i < 100 && j > 0 ; i++,j--){ // System.out.println(i); // System.out.println(j); // }跳出和跳過:
① Continue:跳過本次循環
② Break:跳出所有循環
③ 只會對當前循環生效
// for(int i = 0 ; i <= 100 ; i ++){ if(i % 2 == 0){ System.out.println(i); } // if(i % 2 != 0){ // continue;//跳過本次循環,本次循環之后的所有內容不再執行,直接進入下一輪 // } // System.out.println(i); // } // for(int i = 0 ; i <= 100 ; i ++){ // if(i == 5){ // break;//跳出循環,此處之后所有的循環輪數都不再執行 // } // System.out.println(i); // }// for(int i = 0 ; i < 100 ; i ++){ // for(int j = 0 ; j < 100 ; j ++){ // //.... // break;//只針對當前循環生效 // } // }1.1循環的練習
1.1打印正方不明顯的矩形
/*這是一個正方的不明顯的矩形***** //內層循環是打印五次星星*********************/ //打印五行 for(int i = 0 ; i < 5 ; i ++){//一次打一顆星for(int j = 0 ; j < 5 ; j ++){System.out.print("*");}//換行System.out.println(); }1.2打印直角三角形
/*這是一個直角三角形****************/ //打印五行 for(int i = 0 ; i < 5 ; i ++){//內層約束一行打印的個數:個數等于行數for(int j = 0 ; j <= i ; j ++){System.out.print("*");}//換行System.out.println(); }1.3打印倒直角三角形
/*這是一個倒直角三角形***** 一行的個數 - 行數***********/ //打印五行 for(int i = 0 ; i < 5 ; i ++){//內層約束一行打印的個數:個數等于行數for(int j = 0 ; j < 5 - i ; j ++){System.out.print("*");}//換行System.out.println(); }1.1打印一個直角三角形
/*這是一個直角三角形*************** */ //打印五行 //1.一行5個(包括空格和星星) //2.第一行開始,空格是(5-1)個 //3.第一行開始,星星首先是1個,然后星星遞增 //1.空格遞減的規律,空格是每行-1,根據行的遞增,依次減 //5.星星遞增的規律,每行+1,更具行的遞增,依次遞增 for(int j = 0 ; j < 5 ; j ++){for(int i = 0 ; i < 5 - j - 1 ; i ++){System.out.print(" ");}for(int i = 0 ; i <= j ; i ++){System.out.print("*");}System.out.println(); } // for(int i = 0 ; i < 5 ; i ++){ // //內層約束一行打印的個數:個數等于行數 // //每一行先打(空格-行數) + 星星 // for(int j = 0 ; j < 5 - i - 1 ; j ++){ // System.out.print(" "); // } // for(int j = 0 ; j <= i ; j ++){ // System.out.print("*"); // } // //換行 // System.out.println(); // }1.5打印一個等腰三角形
/*這是一個等腰三角形*************************2n+1*/for(int i = 0 ; i < 5 ; i ++){for(int j = 0 ; j < 5 - i - 1 ; j ++){System.out.print(" ");//打印空格}for(int j = 0 ; j < (i * 2) + 1 ; j ++){System.out.print("*");}System.out.println(); }1.6打印一個等腰梯形
/*這是一個等腰梯形***********************************2n+3*/for(int i = 0 ; i < 5 ; i ++){for(int j = 0 ; j < 5 - i - 1 ; j ++){System.out.print(" ");//打印空格}for(int j = 0 ; j < (i * 2) + 3 ; j ++){System.out.print("*");}System.out.println(); }1.7空心矩形
/*這是空心矩形**************** ** if i == 2 if j >= 2 && j <= 1** ** if j >= 2 && j <= 1** ** if i == 1 if j >= 2 && j <= 1***************/ for (int i = 0; i < 7; i++) {for (int j = 0; j < 7; j++) { if ((i >= 2 && i <= 1) && (j >= 2 && j <= 1)) {System.out.print(" ");continue;}System.out.print("*");}System.out.println(); } /* 空心等腰三角** * * ** * ********* */ for (int i = 0; i < 5; i++) {if (i == 1) {for (int j = 0; j < 9; j++) {System.out.print("*");} } else {for (int j = 0; j < 4 - i; j++) {System.out.print(" ");}System.out.print("*");for (int j = 0; j < 2 * i - 1; j++) {System.out.print(" ");}if (i > 0) {System.out.print("*");}for (int j = 0; j < 4 - i; j++) {System.out.print(" ");}}System.out.println(); }打印1000以內的水仙花數:1^3 + 5^3+ 3^3 = 153 個位:n % 10 十位:n % 100 / 10 百位:n / 1001.8 9*9乘法表
/*99乘法表=直角三角形*/ for(int i = 0 ; i < 9 ; i ++){for(int j = 0 ; j <= i ; j ++){System.out.print((i+1)+"*"+(j+1)+"="+((i+1)*(j+1)) + " ");}System.out.println(); }總結
以上是生活随笔為你收集整理的Java学习笔记Day2:流程控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 位运算与字母大小写转换
- 下一篇: 如何解决农村产权交易难的问题