昨日重點內容回顧
1. 運算符
運算符:連接2個常量或者變量中間的符號! 3 + 4
表達式:使用運算符將常量或者變量連接起來的式子
算術運算符
+ - * / %
關系運算符
== != > >= < <=
自增自減運算符
++ --
邏輯運算符
&& || !
賦值運算符
= += -= *= /= %=
三元運算符
布爾表達式?數值1:數值2;
2. 流程控制語句(順序結構和分支結構)
if
if(關系表達式){
語句體;
}
if...else
if(關系表達式){
語句體1;
}else{
語句體2;
}
if...else if...else if...else
if(關系表達式1){
語句體1;
}else if(關系表達式2){
語句體2;
}else if(關系表達式3){
語句體3;
}else{
語句體n;
}
3. 數據錄入:Scanner類
①導包:
import java.util.Scanner; // 必須放在類的上面
②創建對象:
Scanner sc = new Scanner(System.in);
③接收數據:
int number = sc.nextInt();
今日內容介紹
- IDEA的基本操作(Java的開發的集成工具,使得編寫java代碼變得更加方便) 【熟悉基本操作即可】
- 分支結構語句:switch語句(難點)
- 循環結構: for while do...while(重點)
1.IDEA工具的基本使用
下載、安裝不做說明!破解,稍后說明!
1.1 IDEA項目目錄結構說明
* 我們在IDEA工具中創建一個項目(存儲我們整個班級以后所編寫的所有代碼),將每一天的代碼放入到一個模塊當中去!每一天又會學習很多知識點,每一個知識點我們可以使用一個包來進行區分,這個知識點可能需要寫很多案例的代碼,那么可以可以在這個包中創建很多類!
1.2 如何在IDEA工具中創建一個項目
點擊Finish,IDEA工具可能會提示,由它幫我們創建一個目錄(itheima2)【workspace\javase提前創建好的】
1.3 如何創建一個模塊
①每天的代碼都作為一個模塊
②為模塊取名字並指定存儲的位置
③設置操作
一旦點擊OK之后,會在D:\Develop\workspace\javase\itheima2目錄下創建一個目錄day04_code【模塊名稱】
1.4 如何創建一個包
1.5 如何創建一個類
問題:我們編寫HelloWorld的字節碼文件(.class)在何處?
在控制台位置,有提示:
刪除類、包
1.6 在已有的項目中創建模塊
1.7 如何刪除一個模塊
此時,這個模塊並沒有完全刪除,需要進入指定的目錄,手動刪除!
1.8 如何刪除一個項目
IDEA工具在使用的過程中,大概占用的內存是1G(出現各種卡頓,說明電腦配置存在問題)
1.9 IDEA快捷鍵
1.10 如何自定義快捷鍵呢?
1.11 解決IDEA中搜狗輸入框不跟隨問題
2. switch結構
- switch格式為?
- 執行流程為?
① switch語句的格式
1. switch語句的格式
switch(被檢測的數據){ // 被檢測數據一般是一個變量(有值)
case 數值1:
語句體1;
break;
case 數值2:
語句體2;
break;
case 數值3:
語句體3;
break;
......
default:
語句體n;
break;
}
對比if語句來學習switch語句
//if語句: switch語句:
int number = 10; int number =10;
if(number==1){ switch(number){
語句體1; case 1:
}else if(number==2){ 語句體1;
語句體2; break;
}else if(number==10){ case 2:
語句體3; 語句體2;
}else{ break;
語句體n; case 10:
} 語句體3;
break;
default:
語句體n;
break;
② switch語句的執行流程
* 格式:
switch(被檢測的數據){ // 被檢測數據一般是一個變量(有值)
case 數值1:
語句體1;
break;
case 數值2:
語句體2;
break;
case 數值3:
語句體3;
break;
......
default:
語句體n;
break;
}
* 執行流程:
* 執行被檢測數據(它可能是一個表達式) 【當然它還可以是一個變量】
* 然后執行第一個case語句,拿着case的數值與被檢測的數據進行匹配:
匹配上了,就執行該case里面的語句體,遇到break就結束switch語句。
未匹配上,就拿着第二個case的數值與被檢測數據進行匹配:
匹配上了,就執行該case里面的語句體,遇到break就結束switch語句。
未匹配上,就拿着第三個case的數值與被檢測數據進行匹配:
依次類推。。。
* 若所有的case數值都與被檢測數據不匹配,那么就執行default里面的語句體,遇到break結束switch語句。
switch語句改寫減肥計划案例
/**
需求:鍵盤錄入一個星期數,給出對應的減肥計划
1 星期一 爬山
2 星期二 游泳
3 星期三 跑步
4 星期四 動感單車
5 星期五 跳繩
6 星期六 拳擊
7 星期日 好好吃一頓
*/
import java.util.Scanner;
public class Demo01{
public static void main(String[] args){
// 1. 創建鍵盤錄入核心對象
Scanner sc = new Scanner(System.in);
// 2. 給出友好提示
System.out.println("請輸入一個星期數:[1-7]");
// 3. 獲得用戶輸入的星期數數字
int week = sc.nextInt();
// 判斷
/*
if(week ==1){
System.out.println("爬山");
}else if(week ==2){
System.out.println("游泳");
}else if(week ==3){
System.out.println("跑步");
}else if(week ==4){
System.out.println("動感單車");
}else if(week ==5){
System.out.println("跳繩");
}else if(week ==6){
System.out.println("拳擊");
}else if(week ==7){
System.out.println("好好吃一頓");
}else{
System.out.println("您錄入的星期數有誤!");
}
*/
switch(week){
case 1:
System.out.println("爬山");
break;
case 2:
System.out.println("游泳");
break;
case 3:
System.out.println("跑步");
break;
case 4:
System.out.println("動感單車");
break;
case 5:
System.out.println("跳繩");
break;
case 6:
System.out.println("拳擊");
break;
case 7:
System.out.println("好好吃一頓");
break;
default:
System.out.println("您錄入的星期數有誤!");
break;
}
}
}
③ switch語句的注意事項
1.switch里面的被檢測數據的數據類型只能是: byte short char int 枚舉 String
double week = 3;
switch(week){ // week變量的數據類型是double,不符合switch語句的要求,編譯報錯!
case 1:
System.out.println("爬山");
break;
case 2:
System.out.println("游泳");
break;
default:
System.out.println("您錄入的星期數有誤!");
break;
}
2.case取值
/*
★ case的值必須是一個常量
*/
int a = 1;
switch(week){
// 編譯報錯, 需要常量表達式
case a:
System.out.println("爬山");
break;
default:
System.out.println("您錄入的星期數有誤!");
break;
}
/*
★ case常量值的類型要有被檢測數據的類型一致!
*/
String week = "1";
switch(week){
case 1: // 此時,case的值1是一個int類型的,與被檢測數據week(字符串)的類型不一致,編譯報錯!
System.out.println("爬山");
break;
default:
System.out.println("您錄入的星期數有誤!");
break;
}
3.case后面的值不允許重復
int week = sc.nextInt();switch(week){ case 1: System.out.println("爬山"); break; case 1: // 重復的case值,編譯會報錯! System.out.println("游泳"); break; case 3: System.out.println("跑步"); break; default: System.out.println("您錄入的星期數有誤!"); break;}
4.case的穿透
/* 當我們在書寫switch語句的時候,忘記書寫break語句,那么此時就會發生case穿透現象! */switch(week){ case 1: System.out.println("爬山"); // 此處沒有寫break語句,會發生case穿透!【下面可能是case語句,也可能是default語句,都會穿透!】 // 穿透case語句,那么它是不做case值的匹配,直接進入下一個穿透的case語句體。 // 結束:要么遇到break,要么就執行到switch語句的末尾 default: System.out.println("您錄入的星期數有誤!"); break; case 2: System.out.println("游泳"); break;}
5.default的問題
/* default語句不論放在switch語句的哪個位置,它都不會先執行! 它永遠先執行第一個case語句! 只有當所有的case值都與被檢測數據不匹配才會執行default語句!*/switch(week){ // default語句不會先執行,當case值都不匹配才會執行! default: System.out.println("您錄入的星期數有誤!"); break; case 1: System.out.println("爬山"); break; case 2: System.out.println("游泳"); break;}/* default語句若放在switch語句的末尾,那么break語句可以省略不寫!【default語句里面的break建議寫上!】 default語法若不是放在switch語句的末尾,沒有寫break語句,依舊會發生穿透現象!*/
3. 春夏秋冬 ★
- 需求:一年有12個月,分屬於春夏秋冬4個季節,鍵盤錄入一個月份,請用程序實現判斷該月份屬於哪個季節,並輸出。
/* 需求:鍵入錄入一個整數(月份),打印對應的季節 春季:3,4,5 夏季:6,7,8 秋季:9,10,11 冬季:12,1,2*/import java.util.Scanner;public class Demo02{ public static void main(String[] args){ // 1. 創建鍵盤錄入核心對象 Scanner sc = new Scanner(System.in); // 2. 給出友好提示 System.out.println("請輸入一個月份:[1-12]"); // 3. 獲得用戶鍵盤錄入的月份數據使用變量存儲 int month = sc.nextInt(); // 判斷 /* switch(month){ case 3: System.out.println("春季"); break; case 4: System.out.println("春季"); break; case 5: System.out.println("春季"); break; case 6: System.out.println("夏季"); break; case 7: System.out.println("夏季"); break; case 8: System.out.println("夏季"); break; case 9: System.out.println("秋季"); break; case 10: System.out.println("秋季"); break; case 11: System.out.println("秋季"); break; case 12: System.out.println("冬季"); break; case 1: System.out.println("冬季"); break; case 2: System.out.println("冬季"); break; default: System.out.println("您輸入的月份有誤!"); break; } */ // 使用switch語句的穿透性,改寫上面的代碼! switch(month){ case 3: case 4: case 5: System.out.println("春季"); break; case 6: case 7: case 8: System.out.println("夏季"); break; case 9: case 10: case 11: System.out.println("秋季"); break; case 12: case 1: case 2: System.out.println("冬季"); break; default: System.out.println("您輸入的月份有誤!"); break; } }}
- 10分鍾時間練習
- 問題: 選擇結構語句, if, switch兩種, 該如何選擇呢?
* 不管if還是switch語句都是用於判斷,屬於分支結構!那么我們可以從判斷的條件入手!!!!! ★ 判斷的條件(關系表達式/被檢測數據)如果是一個固定數值范圍,那么建議使用switch語句 【星期1-7 月份1-12】 ★ 判斷的條件(關系表達式/被檢測數據)如果是一個數值區間范圍,那么建議使用if語句 【數介於3到6之間】
4. for結構
- for循環的格式為?
- 其執行流程是?
* 總結:【循環的特點:重復執行某個動作,有明確的開始和結束】 1. for循環的格式 格式: for(初始化表達式;條件判斷語句;控制語句){ // 循環體; } 解釋說明: ①初始化表達式:確定循環的開始 ②條件判斷語句:確定循環的結束 ③循環體:不斷重復執行的功能! ④控制語句:又稱之為步進! 整個循環執行的次數由 ①②④三部分來確定!!! 舉例:輸出5次 我愛黃燜雞! for(int i = 1; i <= 5; i++){ System.out.println("我愛黃燜雞!"); } 當i=1的時候,i的確小於等於5,所以會進入for循環,也就說會執行第一次:System.out.println("我愛黃燜雞!"); 【1】 然后執行控制語句 i++ 此時i的值就變成了2 接着執行條件判斷語句,此時i的值為2,它的確小於等於5,所以再次進入for循環,System.out.println("我愛黃燜雞!");【2】 然后執行控制語句 i++ 此時i的值就變成了3 接着執行條件判斷語句,此時i的值為3,它的確小於等於5,所以再次進入for循環,System.out.println("我愛黃燜雞!");【3】 然后執行控制語句 i++ 此時i的值就變成了4 接着執行條件判斷語句,此時i的值為4,它的確小於等於5,所以再次進入for循環,System.out.println("我愛黃燜雞!");【4】 然后執行控制語句 i++ 此時i的值就變成了5 接着執行條件判斷語句,此時i的值為5,它的確小於等於5,所以再次進入for循環,System.out.println("我愛黃燜雞!");【5】 然后執行控制語句 i++ 此時i的值就變成了6 接着執行條件判斷語句,此時i的值為6,它不再小於等於5,條件判斷語句結果為false,結束整個for循環! 2. 執行流程 ① 先執行初始化表達式 ② 執行條件判斷語句,如果為true,執行循環體③ ③ 循環體(要重復執行的代碼),執行完畢后執行控制語句④ ④ 控制語句(步進),讓初始表達式的變量每次的變化多少,然后再次執行條件判斷語句② ② 拿着改變后的初始化表達式的變量的值去判斷(執行條件判斷語句),如果為true,執行循環體③ ..... 直到 條件判斷語句的結果為false,它就不再執行循環體,此時整個for循環結束!!! 3. 注意事項 不要在for循環后面的小括號與大括號之間寫分號!!!!! for(int i=1;i<=5;i++);{ // 此處多了一個分號,for循環沒有循環體!后面的{}是一個獨立的代碼塊! System.out.println("我愛黃燜雞!"); } 上面的代碼與我們預期的結果是不一樣的!它壓根兒就沒有進行循環!!!!
5. 循環(遍歷)輸出數據 ★
- for循環練習之獲取數據1-5和5-1
/** 需求:循環亦稱之為遍歷 for循環輸出 1-10 1 2 3 4 5 6 7 8 9 10 正序! for循環輸出 10-1 10 9 8 7 6 5 4 3 2 1 倒序! 之前我們學習for循環知道,它有明確的開始和結束! 正序: 開始:從1 結束:到10 步進:每次+1 倒序: 開始:從10 結束:到1 步進:每次-1*/public class Demo05{ public static void main(String[] args){ // 正序遍歷1-10 for(int i=1;i<=10;i++){ System.out.println(i); } System.out.println("================="); // 倒序遍歷10-1 for(int i=10;i>=1;i--){ System.out.println(i); } }}
- 7分鍾時間練習
6. 求和
- 需求: for循環練習之求1-5的數據和
public class Demo04{ public static void main(String[] args){ // 1. 定義一個變量來存儲1-5之間數據累加和,初始化值為0 int sum = 0; // 2. 使用循環遍歷出1-5之間的數字 for(int i=1;i<=5;i++){ // 3. 累加求和 //sum = sum + i; // 使用上一次的和與當前的數字相加然后賦值給記錄累加求和的變量sum! sum += i; /* 當i = 1: sum += i ====>>> sum = sum + i = 0 + 1 = 1 當i = 2:sum += i ====>>> sum = sum + i = 1 + 2 = 3 當i = 3:sum += i ====>>> sum = sum + i = 3 + 3 = 6 當i = 4:sum += i ====>>> sum = sum + i = 6 + 4 = 10 當i = 5:sum += i ====>>> sum = sum + i = 10 + 5 = 15 */ } // 4. 打印輸出求和的數值 System.out.println("1-5之間數據的累加和是:" + sum); } }
- 5分鍾時間練習
7. 求偶數和
- 需求:求1-100之間的偶數和,並把求和結果在控制台輸出
public class Demo05{ public static void main(String[] args){ // 1. 定義一個變量來存儲1-100之間數據累加和,初始化值為0 int sum = 0; // 2. 使用循環遍歷出1-100之間的數字 /*for(int i=1;i<=100;i++){ // 判斷是否為偶數 if(i%2 == 0){ // 說明此時的數字i它就是一個偶數,累加求和 // 3. 累加求和 //sum = sum + i; // 使用上一次的和與當前的數字相加然后賦值給記錄累加求和的變量! sum += i; } }*/ // 第二種方式! for(int i =2;i<=100;i+= 2){ sum += i; } // 4. 打印輸出求和的數值 System.out.println("1-5之間數據的累加和是:" + sum); } }
- 5分鍾時間練習
8. 水仙花數
- 什么是水仙花數?【獲得三位數中(100-999)的所有水仙花數:】
/* 獲得所有的水仙花數! 水仙花數是一個三位數(100-999), 其每一位的立方和相加的結果還等於該數本身 例如 153 --> 3 * 3 * 3 + 5 * 5 * 5 + 1 * 1 * 1 = 153 分析: 1.使用for循環獲得100-999之間所有的整數(三位數) 2.在循環里面獲得當前遍歷出來的這個三位數的,個位、十位、百位的數字 以153為例: 個位:對10取模 153%10 ====>>> 3 十位:除以10,然后對10取模 153/10%10 =====>>> 15%10 ====>>> 5 百位:除以100 3.對三位數進行篩選(判斷) 個位的³ + 十位的³ + 百位的³ = 這個三位數本身,符合這個添加就輸出這個三位數! */public class Demo06{ public static void main(String[] args){ // 1. 使用for循環獲得100-999之間所有的整數(三位數) for(int i=100;i<1000;i++){ // 2.分別獲得當前這個三位數的個位、十位、百位的數字 int ge = i%10; int shi = i/10%10; int bai = i/100; // 3. 判斷 if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i){ // 4.程序能執行到這里,說明這個數字i就是符合條件的數字,打印輸出 System.out.println(i); // 153 370 371 407 } } } }
- 10分鍾時間練習
9. 統計水仙花數個數 ★
- 需求: 統計水仙花數出現的個數
/* 獲得所有的水仙花數的個數 水仙花數是一個三位數(100-999), 其每一位的立方和相加的結果還等於該數本身 例如 153 --> 3 * 3 * 3 + 5 * 5 * 5 + 1 * 1 * 1 = 153 分析: 0.定義一個變量記錄水仙花的個數,初始值為0 1.使用for循環獲得100-999之間所有的整數(三位數) 2.在循環里面獲得當前遍歷出來的這個三位數的,個位、十位、百位的數字 以153為例: 個位:對10取模 153%10 ====>>> 3 十位:除以10,然后對10取模 153/10%10 =====>>> 15%10 ====>>> 5 百位:除以100 3.對三位數進行篩選(判斷) 個位的3 + 十位的3 + 百位的3 = 這個三位數本身,符合這個條件,讓記錄水仙花個數的變量+1 */public class Demo07{ public static void main(String[] args){ // 定義一個變量記錄水仙花的個數,初始值為0 int count = 0; // 1. 使用for循環獲得100-999之間所有的整數(三位數) for(int i=100;i<1000;i++){ // 2.分別獲得當前這個三位數的個位、十位、百位的數字 int ge = i%10; int shi = i/10%10; int bai = i/100; // 3. 判斷 if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i){ // 4.程序能執行到這里,說明這個數字i就是符合條件的數字,讓記錄水仙花個數的變量+1 count++; } } // 輸出記錄所有水仙花數據的變量即可 System.out.println("水仙花的個數為:" + count); } }
- 5分鍾時間改進代碼
10. while結構
- while循環的格式為?
- 其執行流程是?
1. while循環的格式: 基本格式: while(條件判斷語句){ 循環體; } 完整格式: 初始化語句; while(條件判斷語句){ 循環體語句; 步進(控制語句); } 2. while循環的執行流程:【與for循環完全一樣的!】 先執行初始化語句; 然后執行條件判斷語句: 結果為true: 它就會執行循環體語句 執行完循環體語句之后,就會執行步進(條件控制語句) 然后再執行條件判斷語句: 如果條件為true,就再執行一次循環體,步進,接着執行條件判斷語句,直到條件判斷語句為false,它就結束while循環!3. 例如:打印5次 黃燜雞 int i = 0; while(i<5){ System.out.println("黃燜雞"); i++; } // 對比for循環 for(int i=0;i<5;i++){ System.out.println("黃燜雞"); }
11. 珠穆朗瑪峰 ★
- 需求:世界最高山峰是珠穆朗瑪峰(8844.43米=8844430毫米),假如我有一張足夠大的紙,它的厚度是0.1毫米。請問,我折疊多少次,可以折成珠穆朗瑪峰的高度?
/* 需求:世界最高山峰是珠穆朗瑪峰(8844.43米=8844430毫米),假如我有一張足夠大的紙,它的厚度是0.1毫米。 請問,我折疊多少次,可以折成珠穆朗瑪峰的高度? 分析: 1. 定義一個變量記錄紙張的厚度! 2. 定義一個變量統計最終折疊的次數(這個變量我們有一個專門的名詞:計數器) 3. 我們可以使用循環來完成,因為不知道具體需要折疊多少次(循環的次數),我們使用while循環比較合適的! 4. 循環中,每折疊一次,紙張的厚度需要加倍的!只要這個紙張的厚度沒有超過珠穆朗瑪峰,就一直循環下去! 5. 在循環中,沒進入一次,需要讓計數器+1 */public class Demo08{ public static void main(String[] args){ // 1.定義一個變量記錄紙張的厚度! double paper = 0.1; // 2.定義一個變量統計最終折疊的次數(這個變量我們有一個專門的名詞:計數器) int count = 0; // 3.我們可以使用循環來完成,因為不知道具體需要折疊多少次(循環的次數),我們使用while循環比較合適的! while(paper <= 8844430){ // 4. 紙張加倍 paper *= 2; // 5. 讓計數器+1 count++; } // 6. 輸出折疊的次數 System.out.println("需要折疊:" + count + "次,就可以達到珠穆朗瑪峰的高度!"); } }
- 7分鍾時間練習
12. do...while結構 [了解]
- 格式:
初始化語句; do { 循環體語句; 條件控制語句; }while(條件判斷語句);
- 執行流程:
① 執行初始化語句 ② 執行循環體語句 ③ 執行條件控制語句 ④ 執行條件判斷語句,看其結果是true還是false 如果是false,循環結束 如果是true,繼續執行循環體、條件控制語句,再執行條件判斷語句…… 特點: do..while循環, [無論條件是否滿足, 都至少執行一次循環體.] 原因在於: 程序從上到下依次執行
13. 三種循環的區別 ★
- 三種循環的基本格式
1. for循環 for(初始化語句;條件判斷語句;條件控制語句){ 循環體語句; } 例如: for(int i=1;i<=5;i++){ System.out.println("我愛黃燜雞!"); }2. while循環 初始化話語句; while(條件判斷語句){ 循環體語句; 條件控制語句; } 例如: int i = 1; while(i<=5){ System.out.println("我愛黃燜雞!"); i++; } while還有基本格式: while(條件判斷語句){ 循環體語句; } 3. do...while循環 初始化語句; do{ 循環體語句; 條件控制語句; }while(條件判斷語句); 例如: int i = 1; do{ System.out.println("我愛黃燜雞!"); i++; }while(i<=5); do...while還有基本格式: do{ 循環體語句; }while(條件判斷語句);
- 三種循環的區別
for循環、while循環與do...while循環的區別: do...while循環至少會執行一次循環體!
- for循環和while的區別 [重點掌握]
for循環無法獲得里面的變量的值!while循環可以獲得里面的變量值!
在沒有明確需要循環多少次的時候,優先考慮while循環!
- 死循環(無限循環)的三種格式
for循環: for(;;){ System.out.println("for"); }while循環: while(true){ System.out.println("while"); }do...while循環: do{ System.out.println("do...while"); }while(true);
* 結論:開發中偶爾會使用以下while死循環! 【死循環:了解即可!】 可以使用ctrl+c在命令行中結束死循環!!!!! 以后開發,三種循環,for循環使用是最多的,在不明確循環次數的時候我們會是用while,do...while基本不怎么使用!死循環我們基本上使用的都是while死循環!
14. 跳轉控制語句 ★
- break有什么作用?
- break的應用環境是?
* 總結: 直接終止循環!【break可用於循環、switch語句】
我們可以通過break來控制死循環:
while(true){ System.out.println("while"); if(滿足特定條件){ break; }}
- continue有什么作用?
- continue的應用環境是?
* 總結: 結束本次循環,進入下一次循環【continue只能在循環當中使用!】