第二天:複習if語句,掃描器,switch語句,迴圈語句
1.if語句---流程控制語句
if之前學的語句是順序結構
1.1 單個if的語法結構
if(條件判斷){
滿足條件需要做的事情;
}
int a=11;
if(a>1){
System.out.println("成功");
}
單個if語句的缺點:單個if語句都是相互獨立的,每一個單個的if語句他都會進行判斷,會消耗cpu的執行時間,降低執行效率。
1.2 if.....else語法結構
if(條件判斷){
滿足條件需要做的事情;
}else{
不滿足條件需要做的事情;
}
if....else存在的目的:
1.單個的if一次只能進行一個條件判斷,而if....else一次可以同時進行兩個條件判斷
2.if....else執行效率比單個的if語句要高些(當if中條件滿足時,else就不會再去消耗cpu的執行時間(也就是當if條件滿足時,else不會執行了))
1.3 多重if語句
if(條件判斷1){
滿足條件1要做的事情;
}else if(條件判斷2){
滿足條件2要做的事情;
}...
else if(條件判斷n){
滿足條件n要做的事情;
}else{
不滿足條件需要做的事情;
}
問題:多重if語句中的else能夠省略嗎?
在有返回值的方法中多重if的esle是不能省略的,其他情況可以省略
多重if語句當某個條件滿足時,後面的條件就不會執行了
1.4 if語句的巢狀(if語句中寫if語句)
2.掃描器(鍵盤錄入)
作用:從鍵盤中自己手動輸入資料,你需要什麼資料你自己通過鍵盤直接輸入即可。
使用掃描器的步驟:
1.匯入掃描器
import java.util.Scanner;
2.生成掃描器物件
Scanner scanner = new Scanner(System.in);
3.接收鍵盤輸入的資料
int a=scanner.nextInt();
例子:
Scanner scanner = new Scanner(System.in);
System.out.print("請輸入您的成績");
int a=scanner.nextInt();
if(a>=90&&a<=100){
System.out.println("優秀");
}else if (a>=60&&a<=89){
System.out.println("及格");
}else{
System.out.println("不及格");
}
3.switch選擇語句
語法結構
switch(變數){
case 變數值1:
變數等於變數值1時需要做的事情;
break;//退出整個程式
case 變數值2:
變數等於變數值3時需要做的事情;
break;
case 變數值3:
變數等於變數值3時需要做的事情;
break;
...
case 變數值n:
變數等於變數值n時需要做的事情;
default:
最終需要做的事情;
}
例子:
System.out.println("請輸入星期數:"); int a1=scanner.nextInt(); switch (a1){ 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("您輸入的資料有錯誤,請重新輸入");
switch注意細節:
1.每一個case代表的就是一種情況,case結束之後必須交break,否則會出現程式碼穿透現象。
2.變數的取值
在jdk1.5之前 只能取 byte short char int
jdk1.5 加了 列舉以及byte short char int的包裝類
在jdk1.7加了 String
3.case後面的break不能省略,否則會出現程式碼穿透現象
4. default位置是否可以發生變化的,default可以在switch語句中的任意位置,也可以省略
注意:如果不是放在末尾,則要加break,否則也會出現程式碼穿透現象
5.switch什麼時候結束?
1.碰到break
2.碰到 }
6.switch與多重if語句有什麼樣的區別?
多重if語句一般用於區間的判斷,switch一般用於選擇性判(變數對應具體的某一個值)
練習題:請從鍵盤輸入月份(1-12)數字,列印出對應的季節?
擴充套件:求三個數字中的最大值?
//三個數求其中最大的數字
int a=11;
int b=22;
int c=33;
int max=a;//首先假設a為最大值
if (b>max){//如果b大於最大數 這時候最大值是a
max=b;//把b的值賦值給max
}
if (c>max){//c大於最大值 這時候最大值是b
max=c;//把c的值賦值給max
}
System.out.println("最大值:"+max);
4.迴圈語句
迴圈含義:反覆做同一件事情 例如:圍著操場跑10圈....
迴圈的三要素:1.變數的初始化,2.條件判斷,3. 變數改變情況
4.1.while迴圈
語法結構:
1迴圈變數的初始化
while(2條件判斷){
迴圈體;
迴圈變數的改變;
}
細節:迴圈變數的改變是避免死迴圈的發生
例子:int a=0;
while(a<10){
System.out.println("這是"+a);
a++;
}
練習題:求0-100的偶數
//求0-100的偶數 int i=0; while(i<=100){ if (i%2==0){//求奇數的話就是i%2!=0就ok了 System.out.println("0-100的偶數有:"+i); } i++; }
while迴圈結束之後,迴圈變數還能繼續使用嗎?答案:可以的
while迴圈的執行流程:
1. 迴圈變數的初始化---迴圈條件判斷---迴圈體---迴圈變數的改變
2.迴圈條件判斷---迴圈體---迴圈變數的改變
3.迴圈條件判斷---迴圈體---迴圈變數的改變
.....直到迴圈結束
4.2do...while迴圈
1迴圈變數的初始化
do{
迴圈體;
3迴圈變數的改變;
}while(2條件判斷);
do...while迴圈結束之後,迴圈變數還能繼續使用嗎?答:可以的
do while迴圈的執行流程:
1.迴圈變數的初始化----迴圈體-----迴圈變數的改變---迴圈條件的判斷
2. 迴圈體-----迴圈變數的改變---迴圈條件的判斷 * 3迴圈體-----迴圈變數的改變---迴圈條件的判斷
...直到迴圈結束
dowhile跟while迴圈相比有一個明顯的特點:
當初始化變數不滿足條件時,迴圈體也會執行一次(先斬後奏)
4.3for迴圈
語法結構:
for(1.變數初始化,2.條件判斷3.變數改變的情況){
迴圈體;
}
例子:for(int i=0;i<10;i++){
System.out.println("這是"+i);
}
for迴圈結束之後,迴圈變數還能繼續使用嗎?答:不可以的
因為for迴圈的迴圈變數的作用域(作用範圍)是區域性變數,迴圈變數的作用範圍只在這一對{ }中有效。
注意:for迴圈的迴圈變數在迴圈結束之後,會被垃圾回收器自動回收。節省記憶體空間。
for迴圈 執行流程:
1.迴圈變數的初始化---迴圈條件判斷-----迴圈體----變數的改變
2.迴圈條件判斷-----迴圈體----變數的改變
3.迴圈條件判斷-----迴圈體----變數的改變
...直到迴圈結束
while do..while for迴圈三者之間的區別:
1.while dowhile迴圈的迴圈變數在迴圈結束之後能夠繼續使用,而for迴圈在迴圈結束之後,迴圈變數被垃圾回收器自動清除了, 不能再繼續使用.
2.while for迴圈必須滿足條件才會執行迴圈體, 而dowhile迴圈就算不滿足條件,也會執行一次迴圈體。
練習題
//求10000-99999之間的迴文數(例如12321就是一個迴文數) (for if求) for迴圈裡面巢狀if 條件;個位==萬位&&十位==千位 int count=0; for (int i = 10000; i <99999 ; i++) { //先求出個位,十位和百位,千位,萬位 int gw=i/1%10; int sw=i/10%10; int bw=i/100%10; int qw=i/1000%10; int ww=i/10000%10; if (gw==ww&&sw==qw){ System.out.println("迴文數:"+i); } }
//求100-999的水仙花數 (例如:1*1*1+5*5*5+3*3*3=153 這就是一個水仙花數)條件:百位*百位*百位+十位*十位*十位+個位*個位*個位=百十個 for (int j = 100; j <1000 ; j++) { //先求出個位,十位和百位 int gw=j/1%10; int sw=j/10%10; int bw=j/100%10; //條件判斷 if(gw*gw*gw+sw*sw*sw+bw*bw*bw==j){ System.out.println("水仙花數:"+j); } }
//求1900-2021中的閏年 例如:year%4==0&&year%100!=0||year%400==0時,這個就是閏年 for (int year=1900;year<=2021;year++){ if(year%4==0&&year%100!=0||year%400==0){ System.out.println("閏年:"+year); } }
巢狀for迴圈(for迴圈裡面巢狀for迴圈)
外迴圈和內迴圈之間有什麼關係?
沒執行一次外迴圈,內迴圈要執行完。
練習題:列印九九乘法表
//列印九九乘法表 //外層控制行數 for (int i = 1; i <=9 ; i++) { //內層輸出內容 for (int j = 1; j <=i ; j++) { System.out.print(i+"*"+j+"="+i*j+"\t"); } System.out.println(); }
擴充套件知識:累加思想
習題:求0-100的總和
1 //累加思想 例題:求1-100的和 2 int sum=0; 3 for (int k = 1; k <=100 ; k++) { 4 sum+=k;//sum=sum+k 第一次: sum=0+1 第二次:sum=1 sum=1+2 第三次:sum=3 sum=3+3 以此類推.... 5 } 6 System.out.println("sum="+sum); 7 double sum1=0; 8 for (int i = 1; i <=10 ; i++) { 9 sum1+=1.0/i; 10 // sum1=sum1+1.0/i; 11 } 12 System.out.println("sum1="+sum1);
綜合練習:在控制檯迴圈輸入五個學生的成績,求其最大值,最小值和總和?
1 //迴圈輸入5個學生的成績,求其最大值,最小值以及總成績? 2 int max=0; 3 int min=100; 4 int sum=0; 5 Scanner sc = new Scanner(System.in); 6 for (int i = 1; i <=5 ; i++) { 7 System.out.println("請輸入第"+i+"個學生成績:"); 8 int j = sc.nextInt(); 9 if (max<j){ 10 max=j; 11 } 12 if (j<min){ 13 min=j; 14 } 15 sum+=j; 16 } 17 System.out.println("最大值:"+max); 18 System.out.println("最小值:"+min); 19 System.out.println("sum="+sum);
5.隨機器:Random
作用:用來產生隨機數的
如何使用隨機器產生隨機數(三個步驟)
1.匯入隨機器
import java.util.Random;
2.生成隨機器物件
Random rd=new Random();
//程式中真正用到隨機器 rd
3.產生隨機數
int a=rd.nextInt();
學習感受:今天是複習JavaSE的第二天,JavaSE基礎部分我打算複習15天左右的時間,學習Java技術這條路真的很難很累,學的內容很多,尤其是你只有一個人之間學習的時候,如果你能找到能跟你志同道合和一起學習java的小夥伴那是極好的,可以跟小夥伴再一起學習,交流,分享心得等等......希望自己不要方向這條路,既然自己選擇了這條路,就要堅定的走下去,那怕頭破血流,當然這說的有些誇張,但是這種決心還是要有的,畢竟是自己選擇的。走出來選擇就去堅持把,加油!!!一起去學Java的小夥伴。最後想送一句我很喜歡的名言:路漫漫其修遠兮,吾將上下而求索。