你需要的是什麼,直接評論留言。
學習交流請加java幫幫交流qq群553841695
分享是一種美德,分享更快樂!
1:switch語句(掌握)
(1)格式:
switch(表達式) {
case 值1:
語句體1;
break;
case 值2:
語句體2;
...
default:
語句體n+1;
}
格式解釋說明:
switch:說明這是switch語句。
表達式:可以是byte,short,int,char
jdk5以後可以是枚舉
jdk7以後可以是字元串
case:後面的值就是要和表達式進行比較的值
break:表示程式到這裡中斷,跳出switch語句
default:如果所有的情況都不比對,就執行這裡,相當于if語句中的else
(2)面試題
switch語句的表達式可以是byte嗎?可以是long嗎?可以是string嗎?
可以,不可以,jdk7以後可以
(3)執行流程:
a:首先計算表達式的值
b:和每一個case進行比對,如果有就執行對應的語句體,看到break就結束。
c:如果沒有比對,就執行default的語句體n+1。
(4)注意事項:
a:case後面隻能是常量,不能是變量,而且,多個case後面的值不能出現相同的
b:default可以省略嗎?
可以省略,但是不建議,因為它的作用是對不正确的情況給出提示。
特殊情況:
case就可以把值固定。
a,b,c,d
c:break可以省略嗎?
可以省略,但是結果可能不是我們想要的。
會出現一個現象:case穿透。
最終我們建議不要省略
d:default一定要在最後嗎?
不是,可以在任意位置。但是建議在最後。
e:switch語句的結束條件
a:遇到break就結束了
b:執行到末尾就結束了
import java.util.scanner;
class switchdemo2 {
public static void main(string[] args) {
//建立鍵盤錄入對象
scanner sc = new scanner(system.in);
//控制鍵盤錄入資料
system.out.println("請輸入一個資料(1-7):");
int week = sc.nextint(); //3
//定義常量
//int number = 3;
//然後把case後面的值改為number,就會報錯
//switch判斷語句
switch(week) {
case 1:
system.out.println("星期一");
case 2:
system.out.println("星期二");
case 3:
system.out.println("星期三");
case 4:
system.out.println("星期四");
case 5:
system.out.println("星期五");
case 6:
system.out.println("星期六");
case 7:
system.out.println("星期日");
system.out.println("你輸入的資料有誤");
//break;
(5)案例:
a:鍵盤錄入一個數字(1-7),輸出對應的星期幾。
b:單項選擇題
c:鍵盤錄入一個字元串的問題
string s = sc.nextline();
d:根據給定的月份,案例:
/* a:
鍵盤錄入一個資料,根據這個資料,我們輸出對應的星期?
鍵盤錄入1,對應輸出星期一
鍵盤錄入2,對應輸出星期二
鍵盤錄入7,對應輸出星期日
分析:
1:鍵盤錄入,用scanner實作
2:判斷我們既可以使用if語句,也可以使用我們要講解的switch語句
注意:
a:遇到左大括号縮進一個tab的位置。
b:關聯不是很大的語句間空行
*/
class switchdemo {
/* b:
模拟單項選擇題。
a:出一個選擇題,然後供你選擇。
b:鍵盤錄入選擇的資料。
c:根據選擇來給出你選擇的結論。
class switchtest2 {
//出一個選擇題,然後供你選擇。
//由于我們現在沒有辦法鍵盤錄入得到一個'a','b'
//這樣的東西,我就用65,66這樣的值替代
//将來我們擷取到這樣的值以後,強制轉換為字元類型
system.out.println("下面的幾個人你最愛誰?");
system.out.println("65 林青霞");
system.out.println("66 張曼玉");
system.out.println("67 劉德華");
system.out.println("68 王力宏");
//鍵盤錄入選擇的資料。
system.out.println("請輸入你的選擇:");
int choicenumber = sc.nextint();
//強制轉換為字元類型
char choice = (char) choicenumber;
switch(choice) {
case 'a':
system.out.println("恭喜你,選擇正确");
case 'b':
system.out.println("不好意思,你選擇有誤");
case 'c':
case 'd':
system.out.println("沒有該選項");
/* c:
根據你鍵盤錄入的字元串,判斷是否有滿足要求的,如果有就輸出。
否則,提示有誤。
class switchtest3 {
//錄入資料
system.out.println("請輸入你要判斷的字元串:");
switch(s) {
case "hello":
system.out.println("你輸入的是hello");
case "world":
system.out.println("你輸入的是world");
case "java":
system.out.println("你輸入的是java");
system.out.println("沒有找到你輸入的資料");
/* d:
用switch語句實作鍵盤錄入月份,輸出對應的季節
a:鍵盤錄入一個月份,用scanner實作
b:用switch語句實作即可
if語句和switch語句的差別?
if語句:
a:針對結果是boolean類型的判斷
b:針對一個範圍的判斷
c:針對幾個常量值的判斷
switch語句:
針對幾個常量值的判斷
class switchtest4 {
system.out.println("請輸入月份(1-12):");
int month = sc.nextint();
/*
switch(month) {
system.out.println("冬季");
system.out.println("春季");
system.out.println("夏季");
case 8:
case 9:
system.out.println("秋季");
case 10:
case 11:
case 12:
system.out.println("你輸入的月份有誤");
//這樣寫太麻煩了,我們使用一個我們不想使用的東西:case穿透
擴充
看程式寫結果
class switchtest {
int x = 2;
int y = 3;
switch(x){
y++;
system.out.println("y="+y);
system.out.println("---------------");
int a = 2;
int b = 3;
switch(a){
b++;
system.out.println("b="+b);
(6)if語句和switch語句各自的場景
a:if
針對boolean類型的判斷
針對一個範圍的判斷
針對幾個常量的判斷
b:switch
2:循環語句(掌握)
(1)有三種:for,while,do...while
(2)for循環語句
a:格式
for(初始化語句;判斷條件語句;控制條件語句){
循環體語句;
執行流程:
a:執行初始化語句
b:執行判斷條件語句
如果這裡是true,就繼續
如果這裡是false,循環就結束
c:執行循環體語句
d:執行控制條件語句
e:回到b
b:注意事項
a:判斷條件語句無論簡單還是複雜,結果是boolean類型
b:循環體語句如果是一條,可以省略大括号,但是不建議
c:有分号就沒有左大括号,有左大括号就沒有分号
c:案例
a:輸出10次helloworld
b:輸出1-10的資料
c:輸出10-1的資料
d:求1-10的和
e:求1-100的和,求1-100的偶數和,求1-100的奇數和
f:求5的階乘
g:在控制台列印水仙花數
h:統計水仙花個數
i:改進版的回文數
一個五位數
個位 = 萬位
十位 = 千位
個位 + 十位 + 千位 + 萬位 = 百位
j:統計1-1000之間同時滿足如下條件的資料有多少個
x%3==2
x%5==3
x%7==2
/* a:
循環語句:for循環,while循環,do...while循環。
for循環格式:
for(初始化語句;判斷條件語句;控制條件語句) {
b:執行判斷條件語句,看其傳回值是true還是false
如果是true,就繼續執行
如果是false,就結束循環
c:執行循環體語句;
e:回到b繼續。
注意事項:
a:判斷條件語句無論簡單還是複雜結果是boolean類型。
b:循環體語句如果是一條語句,大括号可以省略;如果是多條語句,大括号不能省略。建議永遠不要省略。
c:一般來說:有左大括号就沒有分号,有分号就沒有左大括号
需求:請在控制台輸出10次"helloworld"
class fordemo {
//最原始的做法
system.out.println("helloworld");
system.out.println("----------");
//這種做法不好,代碼的重複度太高。
//是以呢,我們用循環改進
for(int x=1;x<=10;x++) {
需求:請在控制台輸出資料1-10
class fordemo2 {
//原始做法
system.out.println(1);
system.out.println(2);
system.out.println(3);
system.out.println(4);
system.out.println(5);
system.out.println(6);
system.out.println(7);
system.out.println(8);
system.out.println(9);
system.out.println(10);
system.out.println("-------------");
//如何改進呢?用循環改進
for(int x=1; x<=10; x++) {
system.out.println(x);
//從0開始
for(int x=0; x<10; x++) {
system.out.println(x+1);
需求:求出1-10之間資料之和
0+1=1
1+2=3
3+3=6
6+4=10
10+5=15
由此可見我們要定義兩個變量:
一個變量用于存儲第一個加數,第一個加數其實儲存的是以前的所有資料和。預設初始化值應該是0。
一個變量用于存儲第二個加數,第二個加數其實就是每次的資料變化的值。
求和思想。
class fordemo3 {
system.out.println(1+2+3+4+5+6+7+8+9+10);
//定義第一個加數
int sum = 0;
//這裡的x其實是第二個加數
sum = sum + x;
0 + 1 = 1
1 + 2 = 3
3 + 3 = 6
//sum += x;
system.out.println("sum:"+sum);
/* e:
需求:
a:求1-100之和。
b:求出1-100之間偶數和
c:求出1-100之間奇數和(自己做)
class fordemo4 {
//求1-100之和。
int sum1 = 0;
for(int x=1; x<=100; x++) {
sum1 +=x;
system.out.println("1-100之和是:"+sum1);
system.out.println("------------------");
//求出1-100之間偶數和
//方式1
int sum2 = 0;
if(x%2 == 0) {
sum2 += x;
system.out.println("1-100偶數之和是:"+sum2);
//方式2
int sum3 = 0;
for(int x=0; x<=100; x+=2) {
sum3 += x;
system.out.println("1-100偶數之和是:"+sum3);
/* f:
需求:求5的階乘。
什麼是階乘呢?
n! = n*(n-1)! 規則
n! = n*(n-1)*(n-2)*...*3*2*1
求階乘思想。
class fordemo5 {
//定義最終結果變量
int jc = 1;
//這裡的x其實可以直接從2開始
//for(int x=1; x<=5; x++)
for(int x=2; x<=5; x++) {
jc *=x;
system.out.println("1-5的階乘是:"+jc);
/* g:
天将降大任于斯人也,必先盜其qq,封其微網誌,收其wifi,奪其手機。讓其靜心學習java歐耶。
需求:在控制台輸出所有的”水仙花數”
我們都不知道什麼叫"水仙花數",你讓我怎麼做呢?
所謂的水仙花數是指一個三位數,其各位數字的立方和等于該數本身。
舉例:153就是一個水仙花數。
153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153
a:三位數其實是告訴了我們範圍。
b:通過for循環我們就可以實作擷取每一個三位數
但是麻煩是如何擷取這個三位數的個,十,百位上的資料
我們如何擷取一個資料的個,十,百呢?
假設有個一個資料:153
ge: 153%10 = 3
shi: 153/10%10 = 5
bai:153/10/10%10 = 1
qian:x/10/10/10%10
wan: x/10/10/10/10%10
c:讓ge*ge*ge+shi*shi*shi+bai*bai*bai和該資料比較
如果相同,就把該資料在控制台輸出。
class fordemo6 {
//三位數其實是告訴了我們範圍。
for(int x=100; x<1000; x++) {
int ge = x%10;
int shi = x/10%10;
int bai = x/10/10%10;
//讓ge*ge*ge+shi*shi*shi+bai*bai*bai和該資料比較
if(x == (ge*ge*ge+shi*shi*shi+bai*bai*bai)) {
//如果相同,就把該資料在控制台輸出。
/* h:
需求:統計”水仙花數”共有多少個
a:首先必須知道什麼是水仙花數
b:定義統計變量,初始化值是0
c:三位數告訴了我們範圍,用for循環就可以搞定
d:擷取每一個三位數的個,十,百的資料
e:按照要求進行判斷
f:如果滿足要求就計數。
class fordemo8 {
//定義統計變量,初始化值是0
int count = 0;
//三位數告訴了我們範圍,用for循環就可以搞定
//擷取每一個三位數的個,十,百的資料
//按照要求進行判斷
//如果滿足要求就計數。
count++;
system.out.println("水仙花數共有"+count+"個");
/* i:
練習:
請在控制台輸出滿足如下條件的五位數
個位等于萬位
十位等于千位
個位+十位+千位+萬位=百位
a:五位數就告訴了我們範圍。
b:分解每一個五位數的個,十,百,千,萬位上的資料
c:按照要求進行判斷即可
class fordemo7 {
//五位數就告訴了我們範圍。
for(int x=10000; x<100000; x++) {
//分解每一個五位數的個,十,百,千,萬位上的資料
int bai = x/10/10%10;
int qian = x/10/10/10%10;
int wan = x/10/10/10/10%10;
//按照要求進行判斷即可
if((ge==wan) && (shi==qian) && (ge+shi+qian+wan==bai)) {
/* j:
需求:請統計1-1000之間同時滿足如下條件的資料有多少個:
對3整除餘2
對5整除餘3
對7整除餘2
a:定義統計變量,初始化值是0
b:1-1000之間是一個範圍,用for很容易就可以實作。
c:每個資料要同時滿足如下要求
d:如果滿足條件,統計資料++即可,最後輸出統計變量
class fordemo9 {
//定義統計變量,初始化值是0
//1-1000之間是一個範圍,用for很容易就可以實作。
for(int x=1; x<=1000; x++) {
每個資料要同時滿足如下要求
if(x%3==2 && x%5==3 && x%7==2) {
//輸出資料
system.out.println("滿足這樣條件的資料共有:"+count+"個");
(3)while循環
a:基本格式
while(判斷條件語句) {
擴充格式:
初始化語句;
while(判斷條件語句){
控制條件語句;
通過檢視這個格式,我們就知道while循環可以和for循環等價轉換。
while循環的基本格式:
while(判斷條件語句) {
通過這個格式,我們就可以看到其實和for循環是差不多的。
class whiledemo {
//輸出10次"helloworld"
//for語句版
system.out.println("--------------");
//while語句版
int x=0;
while(x<10) {
x++;
b:while的練習
把for語句的練習用while改進
練習:用while循環實作
左邊:求出1-100之和
右邊:統計水仙花數有多少個
class whiledemo2 {
//求出1-100之和
//for語句版本
sum+=x;
system.out.println("--------");
//while語句版本
int y=1;
while(y<=100) {
sum2+=y;
system.out.println("sum2:"+sum2);
需求:統計水仙花數有多少個
class whiledemo3 {
//for循環版本
if((ge*ge*ge+shi*shi*shi+bai*bai*bai) == x) {
system.out.println("count:"+count);
system.out.println("------------");
//while循環版本
int count2 = 0;
int y = 100;
while(y<1000) {
int ge = y%10;
int shi = y/10%10;
int bai = y/10/10%10;
if((ge*ge*ge+shi*shi*shi+bai*bai*bai) == y) {
count2++;
system.out.println("count2:"+count2);
c:for和while的差別
a:使用上的差別
for語句的那個控制條件變量,在循環結束後不能在使用了。
而while的可以繼續使用。
b:了解上的差別
for适合于一個範圍的判斷
while适合次數不明确的
舉例:吃葡萄
while循環和for循環的差別?
使用差別:如果你想在循環結束後,繼續使用控制條件的那個變量,用while循環,否則用for循環。不知道用for循環。
因為變量及早的從記憶體中消失,可以提高記憶體的使用效率。
其實還有一種場景的了解:
如果是一個範圍的,用for循環非常明确。
如果是不明确要做多少次,用while循環較為合适。
舉例:吃葡萄。
class whiledemo4 {
//for循環實作
system.out.println("學習java技術哪家強,中國北京傳智播客");
//這裡不能在繼續通路了
//system.out.println(x);
//while循環實作
int y = 0;
while(y<10) {
//這裡是可以繼續通路的
system.out.println(y);
}
d:案例:
a:珠穆朗瑪峰問題
b:小芳存錢問題(break以後才能做)
我國最高山峰是珠穆朗瑪峰:8848m,我現在有一張足夠大的紙張,厚度為:0.01m。
請問,我折疊多少次,就可以保證厚度不低于珠穆朗瑪峰的高度?
a:定義一個統計變量,預設值是0
b:最高山峰是珠穆朗瑪峰:8848m這是最終的厚度
我現在有一張足夠大的紙張,厚度為:0.01m這是初始厚度
c:我折疊多少次,就可以保證厚度不低于珠穆朗瑪峰的高度?
折疊一次有什麼變化呢?就是厚度是以前的2倍。
d:隻要每次變化的厚度沒有超過珠穆朗瑪峰的高度,就折疊,統計變量++
e:輸出統計變量。
class whiledemo5 {
//定義一個統計變量,預設值是0
//最高山峰是珠穆朗瑪峰:8848m這是最終的厚度
//我現在有一張足夠大的紙張,厚度為:0.01m這是初始厚度
//為了簡單,我把0.01變成1,同理8848就變成了884800
int end = 884800;
int start = 1;
while(start<end) {
//隻要每次變化的厚度沒有超過珠穆朗瑪峰的高度,就折疊,統計變量++
//折疊一次有什麼變化呢?就是厚度是以前的2倍。
start *= 2;
system.out.println("第"+count+"次厚度是"+start);
//輸出統計變量。
system.out.println("要疊"+count+"次");
需求:小芳的媽媽每天給她2.5元錢,她都會存起來,但是,
每當這一天是存錢的第5天或者5的倍數的話,她都會花去6元錢,
請問,經過多少天,小芳才可以存到100元錢。
a:小芳的媽媽每天給她2.5元錢
double daymoney = 2.5;
b:她都會存起來
double daysum = 0;
c:從第一天開始存儲
int daycount = 1;
d:經過多少天,小芳才可以存到100元錢。
double result = 100;
e:這一天是存錢的第5天或者5的倍數的話,她都會花去6元錢,
說明要判斷daycount的值,如果對5整除就減去6元錢。
daysum -= 6;
由此還隐含了一個問題,就是如果不是5的倍數天的話,錢要累加
daysum += daymoney;
f:因為不知道是多少天,是以我用死循環,一旦超過100元我就退出循環。
//每天要存儲的錢是2.5元
//存錢的初始化值是0
//從第一天開始存儲
//最終存儲不小于100就不存儲了
int result = 100;
//因為不知道是多少天,是以我用死循環,
while(true) {
//累加錢
//一旦超過100元我就退出循環。
if(daysum >= result) {
system.out.println("共花了"+daycount+"天存儲了100元");
if(daycount%5 == 0) {
//花去6元錢
system.out.println("第"+daycount+"天花了6元錢");
//天數變化
daycount++;
(4)do...while循環
do {
}while(判斷條件語句);
通過檢視格式,我們就可以看出其實三種循環的格式可以是統一的。
do...while循環的基本格式:
擴充格式;
class dowhiledemo {
//輸出10次helloworld。
int x = 0;
}while(x<10);
//求和1-100
int a = 1;
sum += a;
a++;
}while(a<=100);
system.out.println(sum);
b:三種循環的差別
a:do...while循環至少執行一次循環體
b:for和while必須先判斷條件是否是true,然後後才能決定是否執行循環體
循環語句的差別:
do...while循環至少執行一次循環體。
而for,while循環必須先判斷條件是否成立,然後決定是否執行循環體語句。
那麼,我們一般使用哪種循環呢?
優先考慮for,其次考慮while,最後考慮do...while
class dowhiledemo2 {
int x = 3;
while(x < 3) {
system.out.println("我愛林青霞");
}while(y < 3);
(5)循環使用的注意事項(死循環)
a:一定要注意修改控制條件,否則容易出現死循環。
b:最簡單的死循環格式
a:while(true){...}
b:for(;;){}
注意死循環:
a:一定要注意控制條件語句控制的那個變量的問題,不要弄丢了,否則就容易死循環。
b:兩種最簡單的死循環格式
while(true){...}
for(;;){...}
class dowhiledemo3 {
while(x < 10) {
system.out.println("今天我很高興,學習了死循環");
for(;;){
//system.out.println("--------------");
(6)循環嵌套
需求:請輸出一個4行5列的星星(*)圖案。
結果:
*****
循環嵌套:就是循環語句的循環體本身是一個循環語句。
通過結果我們知道這樣的一個結論:
外循環控制行數
内循環控制列數
class forfordemo {
system.out.println("*****");
//雖然可以完成需求,但是不是很好
//如果是多行多列就會比較麻煩
//是以我們準備改進
//如何改進呢?
//我先考慮如何實作一行*的問題
//system.out.println("*****");
//我們要想的是如何實作一次輸出一顆*的問題
//system.out.println("*");
//現在雖然可以一次一顆*,但是卻換行了,我要求不能換行,怎麼辦呢?
//輸出語句的另一種格式:system.out.print(); 這個是不帶換行的
//system.out.print("*");
//如果我要在一行上打出多顆*,比較麻煩,而代碼是重複的,是以我決定用循環改進
for(int x=0; x<5; x++) {
system.out.print("*");
//我們可以通過空的輸出語句實作換行:system.out.println();
system.out.println();
//既然我可以打出一行,我就可以打出第二行
//同理打出第三行,第四行
system.out.println("-----------------");
//同樣的代碼出現了4次,說明我們程式寫的不好,用循環改進
for(int y=0; y<4; y++) {
需求:請輸出下列的形狀
*
**
***
****
class forfordemo2 {
//通過簡單的觀察,我們看到這是一個行是5,列數是變化的形狀
//我們先列印出一個5行5列的形狀
for(int y=0; y<5; y++) {
//我們實作了一個5行5列的形狀
//但是這不是我們想要的
//我們要的是列數變化的
//列數是如何變化的呢?
//第一行:1列
y=0,y<=0,y++
//第二行:2列
y=0,y<=1,y++
//第三行:3列
y=0,y<=2,y++
//第四行:4列
y=0,y<=3,y++
//第五行:5列
y=0,y<=4,y++
//在看外循環x的變化,恰好就是x=0,1,2,3,4
//是以這個最終版的程式就是如下
for(int y=0; y<=x; y++) {
需求:在控制台輸出九九乘法表。
首先我們寫出九九乘法表:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6
3*3=9
1*4=4 2*4=8
3*4=12 4*4=16
1*9=9 2*9=18
3*9=27 ...
我們先把這個九九乘法表看出是這樣的一個形狀:
******
*******
********
*********
'\x' x表示任意,這種做法叫轉移字元。
'\t' tab鍵的位置
'\r' 回車
'\n' 換行
class forfordemo3 {
for(int x=0; x<9; x++) {
//為了使用資料,我們從1開始
for(int x=1; x<=9; x++) {
for(int y=1; y<=x; y++) {
system.out.print(y+"*"+x+"="+y*x+"\t");
3:控制跳轉語句(掌握)
(1)break:中斷的意思
a:用在循環和switch語句中,離開此應用場景無意義。
b:作用
a:跳出單層循環
b:跳出多層循環,需要标簽語句的配合
控制跳轉語句:
break:中斷
continue:繼續
return:傳回
break:中斷的意思
使用場景:
a:switch語句中
b:循環語句中。
(循環語句中加入了if判斷的情況)
注意:離開上面的兩個場景,無意義。
如何使用呢?
b:跳出多層循環
要想實作這個效果,就必須知道一個東西。帶标簽的語句。
格式:
标簽名: 語句
class breakdemo {
//在 switch 或 loop 外部中斷
//跳出單層循環
if(x == 3) {
system.out.println("over");
wc:for(int x=0; x<3; x++) {
nc:for(int y=0; y<4; y++) {
if(y == 2) {
//break nc;
break wc;
(2)continue:繼續
a:用在循環中,離開此應用場景無意義。
a:跳出單層循環的一次,可以繼續下一次
c:填空題
if(x%3 == 0) {
//補齊代碼
system.out.println("java基礎班");
如何讓控制台輸出2次:java基礎班
如何讓控制台輸出7次:java基礎班
如何讓控制台輸出13次:java基礎班
循環中。離開此場景無意義。
測試,找到和break的差別:
break:跳出單層循環
continue:跳出一次循環,進入下一次的執行
練習題:
if(x%3==0) {
//在此處填寫代碼
system.out.println(“java基礎班”);
我想在控制台輸出2次:“java基礎班“
我想在控制台輸出7次:“java基礎班“
continue;
我想在控制台輸出13次:“java基礎班“
class continuedemo {
(3)return:傳回
a:用于結束方法的,後面還會在繼續講解和使用。
b:一旦遇到return,程式就不會在繼續往後執行。
其實它的作用不是結束循環的,而是結束方法的。
class returndemo {
if(x == 2) {
system.out.println("退出");
//continue;
return;