這輩子沒辦法做太多事情,所以每一件都要做到精彩絕倫撤蟆。 --------史蒂夫.喬布斯
選擇結(jié)構(gòu)(if語句)
(1)三種格式
A:格式1
if(比較表達(dá)式) {
語句體;
}
執(zhí)行流程:
判斷比較表達(dá)式的值奕塑,看是true還是false
如果是true,就執(zhí)行語句體
如果是false家肯,就不執(zhí)行語句體
B:格式2
if(比較表達(dá)式) {
語句體1;
}else {
語句體2;
}
執(zhí)行流程:
判斷比較表達(dá)式的值龄砰,看是true還是false
如果是true,就執(zhí)行語句體1
如果是false讨衣,就執(zhí)行語句體2
C:格式3
if(比較表達(dá)式1) {
語句體1;
}else if(比較表達(dá)式2){
語句體2;
}
...
else {
語句體n+1;
}
執(zhí)行流程:
判斷比較表達(dá)式1的值换棚,看是true還是false
如果是true,就執(zhí)行語句體1
如果是false反镇,就繼續(xù)判斷比較表達(dá)式2的值固蚤,看是true還是false
如果是true,就執(zhí)行語句體2
如果是false歹茶,就繼續(xù)判斷比較表達(dá)式3的值夕玩,看是true還是false
...
如果都不滿足,就執(zhí)行語句體n+1
(2)注意事項(xiàng)
A:比較表達(dá)式無論簡(jiǎn)單還是復(fù)雜惊豺,結(jié)果是boolean類型
B:if語句控制的語句體如果是一條語句燎孟,是可以省略大括號(hào)的;如果是多條尸昧,不能省略揩页。
建議:永遠(yuǎn)不要省略。
C:一般來說彻磁,有左大括號(hào)碍沐,就沒有分號(hào),有分號(hào)衷蜓,就沒有左大括號(hào)。
D:else后面如果沒有if尘喝,是不會(huì)出現(xiàn)比較表達(dá)式的磁浇。
E:三種if語句其實(shí)都是一個(gè)語句,只要有一個(gè)執(zhí)行朽褪,其他的就不再執(zhí)行置吓。
(3)案例:
A:比較兩個(gè)數(shù)是否相等
B:獲取兩個(gè)數(shù)中的最大值
C:獲取三個(gè)數(shù)中的最大值(if語句的嵌套)
D:根據(jù)成績(jī)輸出對(duì)應(yīng)的等級(jí)
E:根據(jù)月份,輸出對(duì)應(yīng)的季節(jié)
F:根據(jù)x計(jì)算對(duì)應(yīng)y的值并輸出
(4)三元運(yùn)算符和if語句第二種格式的關(guān)系
所有的三元運(yùn)算符能夠?qū)崿F(xiàn)的缔赠,if語句的第二種格式都能實(shí)現(xiàn)衍锚。
反之不成立。
如果if語句第二種格式控制的語句體是輸出語句嗤堰,就不可以戴质。
因?yàn)槿\(yùn)算符是一個(gè)運(yùn)算符,必須要有一個(gè)結(jié)果返回,不能是一個(gè)輸出語句告匠。
/*
if語句的注意事項(xiàng):
A:比較表達(dá)式無論簡(jiǎn)單還是復(fù)雜戈抄,結(jié)果必須是boolean類型
B:if語句控制的語句體如果是一條語句,大括號(hào)可以省略后专;
如果是多條語句划鸽,就不能省略。建議永遠(yuǎn)不要省略戚哎。
C:一般來說:有左大括號(hào)就沒有分號(hào)裸诽,有分號(hào)就沒有左大括號(hào)
*/
class IfDemo2 {
public static void main(String[] args) {
int x = 10;
if(x == 10) {
System.out.println("x等于10");
}
if((x > 5) || (x == 10)) {
System.out.println("x大于或者等于10");
}
System.out.println("-------------------");
int a = 100;
/*
if(a == 100) {
System.out.println("a的值是100");
}
*/
if(a != 100) {
System.out.println("a的值是100");
System.out.println("over");
}
System.out.println("-------------------");
int b = 100;
if(b != 100); //這里其實(shí)是有語句體的,只不過是空語句體型凳。
//代碼塊
{
System.out.println("b的值是100");
System.out.println("over");
}
}
}
選擇結(jié)構(gòu)(switch語句)
(1)格式:
switch(表達(dá)式) {
case 值1:
語句體1;
break;
case 值2:
語句體2;
break;
...
default:
語句體n+1;
break;
}
格式解釋說明:
switch:說明這是switch語句崭捍。
表達(dá)式:可以是byte,short,int,char
JDK5以后可以是枚舉
JDK7以后可以是字符串
case:后面的值就是要和表達(dá)式進(jìn)行比較的值
break:表示程序到這里中斷,跳出switch語句
default:如果所有的情況都不匹配,就執(zhí)行這里,相當(dāng)于if語句中的else
(2)面試題
switch語句的表達(dá)式可以是byte嗎?可以是long嗎?可以是String嗎?
可以,不可以,JDK7以后可以
(3)執(zhí)行流程:
A:首先計(jì)算表達(dá)式的值
B:和每一個(gè)case進(jìn)行匹配啰脚,如果有就執(zhí)行對(duì)應(yīng)的語句體殷蛇,看到break就結(jié)束。
C:如果沒有匹配橄浓,就執(zhí)行default的語句體n+1粒梦。
(4)注意事項(xiàng):
A:case后面只能是常量,不能是變量荸实,而且匀们,多個(gè)case后面的值不能出現(xiàn)相同的
B:default可以省略嗎?
可以省略,但是不建議准给,因?yàn)樗淖饔檬菍?duì)不正確的情況給出提示泄朴。
特殊情況:
case就可以把值固定。
A,B,C,D
C:break可以省略嗎?
可以省略露氮,但是結(jié)果可能不是我們想要的祖灰。
會(huì)出現(xiàn)一個(gè)現(xiàn)象:case穿透。
最終我們建議不要省略
D:default一定要在最后嗎?
不是畔规,可以在任意位置局扶。但是建議在最后。
E:switch語句的結(jié)束條件
a:遇到break就結(jié)束了
b:執(zhí)行到末尾就結(jié)束了
(5)案例:
A:鍵盤錄入一個(gè)數(shù)字(1-7),輸出對(duì)應(yīng)的星期幾叁扫。
B:單項(xiàng)選擇題
C:鍵盤錄入一個(gè)字符串的問題
String s = sc.nextLine();
D:根據(jù)給定的月份,輸出對(duì)應(yīng)的季節(jié)
(6)if語句和switch語句各自的場(chǎng)景
A:if
針對(duì)boolean類型的判斷
針對(duì)一個(gè)范圍的判斷
針對(duì)幾個(gè)常量的判斷
B:switch
針對(duì)幾個(gè)常量的判斷
import java.util.Scanner;
class SwitchDemo {
public static void main(String[] args) {
//創(chuàng)建鍵盤錄入對(duì)象
Scanner sc = new Scanner(System.in);
//控制鍵盤錄入數(shù)據(jù)
System.out.println("請(qǐng)輸入一個(gè)數(shù)據(jù)(1-7):");
int week = sc.nextInt(); //3
//switch判斷語句
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("你輸入的數(shù)據(jù)有誤");
break;
}
}
}
循環(huán)語句(for循環(huán))
A:格式
for(初始化語句;判斷條件語句;控制條件語句){
循環(huán)體語句;
}
執(zhí)行流程:
a:執(zhí)行初始化語句
b:執(zhí)行判斷條件語句
如果這里是true三妈,就繼續(xù)
如果這里是false,循環(huán)就結(jié)束
c:執(zhí)行循環(huán)體語句
d:執(zhí)行控制條件語句
e:回到b
B:注意事項(xiàng)
a:判斷條件語句無論簡(jiǎn)單還是復(fù)雜莫绣,結(jié)果是boolean類型
b:循環(huán)體語句如果是一條畴蒲,可以省略大括號(hào),但是不建議
c:有分號(hào)就沒有左大括號(hào)对室,有左大括號(hào)就沒有分號(hào)
C:案例
a:輸出10次HelloWorld
b:輸出1-10的數(shù)據(jù)
c:輸出10-1的數(shù)據(jù)
d:求1-10的和
e:求1-100的和,求1-100的偶數(shù)和,求1-100的奇數(shù)和
f:求5的階乘
g:在控制臺(tái)打印水仙花數(shù)
h:統(tǒng)計(jì)水仙花個(gè)數(shù)
i:改進(jìn)版的回文數(shù)
一個(gè)五位數(shù)
個(gè)位 = 萬位
十位 = 千位
個(gè)位 + 十位 + 千位 + 萬位 = 百位
j:統(tǒng)計(jì)1-1000之間同時(shí)滿足如下條件的數(shù)據(jù)有多少個(gè)
x%3==2
x%5==3
x%7==2
/*
需求:在控制臺(tái)輸出所有的”水仙花數(shù)”
分析:
我們都不知道什么叫"水仙花數(shù)"模燥,你讓我怎么做呢?
所謂的水仙花數(shù)是指一個(gè)三位數(shù)咖祭,其各位數(shù)字的立方和等于該數(shù)本身。
舉例:153就是一個(gè)水仙花數(shù)涧窒。
153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153
A:三位數(shù)其實(shí)是告訴了我們范圍心肪。
B:通過for循環(huán)我們就可以實(shí)現(xiàn)獲取每一個(gè)三位數(shù)
但是麻煩是如何獲取這個(gè)三位數(shù)的個(gè),十,百位上的數(shù)據(jù)
我們?nèi)绾潍@取一個(gè)數(shù)據(jù)的個(gè),十,百呢?
假設(shè)有個(gè)一個(gè)數(shù)據(jù):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和該數(shù)據(jù)比較
如果相同,就把該數(shù)據(jù)在控制臺(tái)輸出纠吴。
*/
class ForDemo6 {
public static void main(String[] args) {
//三位數(shù)其實(shí)是告訴了我們范圍硬鞍。
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和該數(shù)據(jù)比較
if(x == (ge*ge*ge+shi*shi*shi+bai*bai*bai)) {
//如果相同,就把該數(shù)據(jù)在控制臺(tái)輸出戴已。
System.out.println(x);
}
}
}
}
循環(huán)語句(while循環(huán))
A:基本格式
while(判斷條件語句) {
循環(huán)體語句;
}
擴(kuò)展格式:
初始化語句;
while(判斷條件語句){
循環(huán)體語句;
控制條件語句;
}
通過查看這個(gè)格式固该,我們就知道while循環(huán)可以和for循環(huán)等價(jià)轉(zhuǎn)換。
B:while的練習(xí)
把for語句的練習(xí)用while改進(jìn)
C:for和while的區(qū)別
a:使用上的區(qū)別
for語句的那個(gè)控制條件變量,在循環(huán)結(jié)束后不能在使用了糖儡。
而while的可以繼續(xù)使用伐坏。
b:理解上的區(qū)別
for適合于一個(gè)范圍的判斷
while適合次數(shù)不明確的
舉例:吃葡萄
D:案例:
a:珠穆朗瑪峰問題
b:小芳存錢問題(break以后才能做)
/*
我國(guó)最高山峰是珠穆朗瑪峰:8848m,我現(xiàn)在有一張足夠大的紙張握联,厚度為:0.01m桦沉。
請(qǐng)問,我折疊多少次金闽,就可以保證厚度不低于珠穆朗瑪峰的高度?
分析:
A:定義一個(gè)統(tǒng)計(jì)變量纯露,默認(rèn)值是0
B:最高山峰是珠穆朗瑪峰:8848m這是最終的厚度
我現(xiàn)在有一張足夠大的紙張,厚度為:0.01m這是初始厚度
C:我折疊多少次代芜,就可以保證厚度不低于珠穆朗瑪峰的高度?
折疊一次有什么變化呢?就是厚度是以前的2倍埠褪。
D:只要每次變化的厚度沒有超過珠穆朗瑪峰的高度,就折疊挤庇,統(tǒng)計(jì)變量++
E:輸出統(tǒng)計(jì)變量钞速。
*/
class WhileDemo5 {
public static void main(String[] args) {
//定義一個(gè)統(tǒng)計(jì)變量,默認(rèn)值是0
int count = 0;
//最高山峰是珠穆朗瑪峰:8848m這是最終的厚度
//我現(xiàn)在有一張足夠大的紙張嫡秕,厚度為:0.01m這是初始厚度
//為了簡(jiǎn)單渴语,我把0.01變成1,同理8848就變成了884800
int end = 884800;
int start = 1;
while(start<end) {
//只要每次變化的厚度沒有超過珠穆朗瑪峰的高度淘菩,就折疊遵班,統(tǒng)計(jì)變量++
count++;
//折疊一次有什么變化呢?就是厚度是以前的2倍。
start *= 2;
System.out.println("第"+count+"次厚度是"+start);
}
//輸出統(tǒng)計(jì)變量潮改。
System.out.println("要疊"+count+"次");
}
}
循環(huán)語句(do...while循環(huán))
A:基本格式
do {
循環(huán)體語句;
}while(判斷條件語句);
擴(kuò)展格式:
初始化語句;
do {
循環(huán)體語句;
控制條件語句;
}while(判斷條件語句);
通過查看格式,我們就可以看出其實(shí)三種循環(huán)的格式可以是統(tǒng)一的腹暖。
B:三種循環(huán)的區(qū)別
a:do...while循環(huán)至少執(zhí)行一次循環(huán)體
b:for和while必須先判斷條件是否是true汇在,然后后才能決定是否執(zhí)行循環(huán)體
/*
循環(huán)語句的區(qū)別:
do...while循環(huán)至少執(zhí)行一次循環(huán)體。
而for,while循環(huán)必須先判斷條件是否成立脏答,然后決定是否執(zhí)行循環(huán)體語句糕殉。
那么亩鬼,我們一般使用哪種循環(huán)呢?
優(yōu)先考慮for,其次考慮while阿蝶,最后考慮do...while
*/
class DoWhileDemo2 {
public static void main(String[] args) {
int x = 3;
while(x < 3) {
System.out.println("我愛林青霞");
x++;
}
System.out.println("--------------");
int y = 3;
do {
System.out.println("我愛林青霞");
y++;
}while(y < 3);
}
}
循環(huán)使用的注意事項(xiàng)(死循環(huán))
A:一定要注意修改控制條件,否則容易出現(xiàn)死循環(huán)雳锋。
B:最簡(jiǎn)單的死循環(huán)格式
a:while(true){...}
b:for(;;){}
控制跳轉(zhuǎn)語句
(1)break:中斷的意思
A:用在循環(huán)和switch語句中,離開此應(yīng)用場(chǎng)景無意義羡洁。
B:作用
a:跳出單層循環(huán)
b:跳出多層循環(huán)玷过,需要標(biāo)簽語句的配合
(2)continue:繼續(xù)
A:用在循環(huán)中,離開此應(yīng)用場(chǎng)景無意義筑煮。
B:作用
a:跳出單層循環(huán)的一次辛蚊,可以繼續(xù)下一次
C:填空題
for(int x=1; x<=10; x++) {
if(x%3 == 0) {
//補(bǔ)齊代碼
}
System.out.println("Java基礎(chǔ)班");
}
如何讓控制臺(tái)輸出2次:Java基礎(chǔ)班
如何讓控制臺(tái)輸出7次:Java基礎(chǔ)班
如何讓控制臺(tái)輸出13次:Java基礎(chǔ)班
(3)return:返回
A:用于結(jié)束方法的,后面還會(huì)在繼續(xù)講解和使用真仲。
B:一旦遇到return,程序就不會(huì)在繼續(xù)往后執(zhí)行袋马。
/*
需求:小芳的媽媽每天給她2.5元錢,她都會(huì)存起來秸应,但是虑凛,
每當(dāng)這一天是存錢的第5天或者5的倍數(shù)的話,她都會(huì)花去6元錢软啼,
請(qǐng)問桑谍,經(jīng)過多少天,小芳才可以存到100元錢焰宣。
分析:
A:小芳的媽媽每天給她2.5元錢
double dayMoney = 2.5;
B:她都會(huì)存起來
double daySum = 0;
C:從第一天開始存儲(chǔ)
int dayCount = 1;
D:經(jīng)過多少天霉囚,小芳才可以存到100元錢。
double result = 100;
E:這一天是存錢的第5天或者5的倍數(shù)的話匕积,她都會(huì)花去6元錢盈罐,
說明要判斷dayCount的值,如果對(duì)5整除就減去6元錢闪唆。
daySum -= 6;
由此還隱含了一個(gè)問題盅粪,就是如果不是5的倍數(shù)天的話,錢要累加
daySum += dayMoney;
F:因?yàn)椴恢朗嵌嗌偬烨睦伲晕矣盟姥h(huán)票顾,一旦超過100元我就退出循環(huán)。
*/
class WhileDemo {
public static void main(String[] args) {
//每天要存儲(chǔ)的錢是2.5元
double dayMoney = 2.5;
//存錢的初始化值是0
double daySum = 0;
//從第一天開始存儲(chǔ)
int dayCount = 1;
//最終存儲(chǔ)不小于100就不存儲(chǔ)了
int result = 100;
//因?yàn)椴恢朗嵌嗌偬旆鳎晕矣盟姥h(huán)奠骄,
while(true) {
//累加錢
daySum += dayMoney;
//一旦超過100元我就退出循環(huán)。
if(daySum >= result) {
System.out.println("共花了"+dayCount+"天存儲(chǔ)了100元");
break;
}
if(dayCount%5 == 0) {
//花去6元錢
daySum -= 6;
System.out.println("第"+dayCount+"天花了6元錢");
}
//天數(shù)變化
dayCount++;
}
}
}