程序的結構一般分為三種:
-
順序結構。
-
選擇結構。
-
循環結構。
一、順序結構:這個不用多說吧,跟我們平時寫文章的順序一樣,從上往下。
二、選擇結構:從名字就能看出,要選擇嘛,到底是要漂亮滴妹子,還是要有錢滴妹子呢!當然,如果是個吊絲碼農滴話,那你就不要多想了,還是老老實實碼代碼吧···
三、循環結構:循環啊,就是一直轉啊轉啊轉啊,轉到出意外為止。
接下來還是老規矩,通過小示例來學習語法吧。
順序結構:
一、輸入姓名和年齡,輸出自我介紹。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public
static
void
main(String[] args) {
//創建輸入數據的對象,具體什么叫對象···,先不用管吧
Scanner input =
new
Scanner(System.in);
String name;
//姓名
int
age;
//年齡
System.out.print(
"請輸入姓名:"
);
name = input.next();
System.out.print(
"請輸入年齡:"
);
age = input.nextInt();
System.out.println(
"大家好,我叫"
+name+
",今年"
+age+
"歲,請多關照。"
);
}
|
注意:
這就是一個標准的順序結構,代碼會從上往下執行,如果你把int age;這句話放到最后,那就會在age = input.nextInt();這一行報語法錯誤了。
結果:
選擇結構:
選擇結構的語法有四種,我們通過下面的案例來了解。
一、輸入你的存款,如果大於5000則加上“壕”的頭銜。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public
static
void
main(String[] args) {
//創建輸入數據的對象,具體什么叫對象···,先不用管吧
Scanner input =
new
Scanner(System.in);
String name;
//姓名
int
deposit;
//存款
System.out.print(
"請輸入姓名:"
);
name = input.next();
System.out.print(
"請輸入存款:"
);
deposit = input.nextInt();
System.out.print(
"大家好,我叫"
+name);
if
(deposit>
5000
){
System.out.print(
"(壕)"
);
}
System.out.println(
"。"
);
}
|
語法:
if( 條件 ){ 要執行的代碼 }
注意:
條件成立時會執行{}中的所有代碼。
結果:
二、輸入你的存款,如果大於5000則加上“壕”的頭銜,否則加上“窮13”的頭銜。
1
2
3
4
5
6
|
if
(deposit>
5000
){
System.out.print(
"(壕)"
);
}
else
{
System.out.print(
"(窮13)"
);
}
|
注意:別的代碼不用動,只需要在if(){}結構上加上else{}就OK了,else{}表示條件不成立時的執行代碼。
結果:
三、輸入你的存款,如果大於50000,則加上“神壕”的頭銜,否則如果大於30000,則加上“金壕”的頭銜,否則如果大於10000,則加上“壕”的頭銜,否則加上“窮13”的頭銜。
1
2
3
4
5
6
7
8
9
10
11
12
|
if
(deposit>
50000
){
System.out.print(
"(神壕)"
);
}
else
if
(deposit>
30000
){
System.out.print(
"(金壕)"
);
}
else
if
(deposit>
10000
){
System.out.print(
"(壕)"
);
}
else
{
System.out.print(
"(窮13)"
);
}
|
注意:這種語法叫多分支選擇結構(一般用於選擇情況大於2的場合,比如演唱會門票的級別、你的女神的胸肌是A還是BCDEF等)。
結果就不展示了。
四、查詢余額請按1,套餐更改請按2,寬帶業務請按3,企業業務請按4,人工服務請按5,其它業務請瞎按.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
public
static
void
main(String[] args) {
//創建輸入數據的對象,具體什么叫對象···,先不用管吧
Scanner input =
new
Scanner(System.in);
int
num;
System.out.print(
"1.查詢余額請按1,"
+
"\n2.套餐更改請按2"
+
"\n3.寬帶業務請按3"
+
"\n4.企業業務請按4"
+
"\n5.人工服務請按5"
+
"\n6.其它業務請瞎按"
+
"\n請選擇:"
);
num = input.nextInt();
switch
(num) {
case
1
:
System.out.println(
"您的余額為0。"
);
break
;
case
2
:
System.out.println(
"改完了,請回吧。"
);
break
;
case
3
:
System.out.println(
"寬帶裝好了,請交錢1998¥。"
);
break
;
case
4
:
System.out.println(
"請上傳企業注冊資料。"
);
break
;
case
5
:
System.out.println(
"我們正在招聘服務人員,請稍等..."
);
break
;
default
:
System.out.println(
"亂按好玩吧..."
);
break
;
}
}
|
注意:
-
switch語法一般用於數值類型和布爾類型等值判斷的場合,最新版的JDK支持String類型了。小伙伴們可以自己試試。
-
每個case后的語句執行完后都有個小尾巴(break;),表示從這兒退出switch結構,大家可以把這個小尾巴去掉看看結果有什么不一樣。
結果:
循環結構:
循環結構常用的有四種:while、do...while、for、foreach(后面講集合時再介紹)。
對應的語法都很簡單,我們通過求100以內的奇數和來了解一下,后面再來分析一個經典案例。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
public
static
void
main(String[] args) {
//求100以內的奇數和
//1.while循環
int
i =
1
;
//循環的初值
int
s =
0
;
//保存和
while
(i<=
100
) {
//循環的條件
s += i;
//循環的內容
i +=
2
;
//循環的步長(也就是循環變量的值如何變化)
}
System.out.println(
"while循環結果:"
+s);
//變量值還原
i =
1
;
s =
0
;
//2.do...while循環
do
{
s += i;
i +=
2
;
}
while
(i<=
100
);
System.out.println(
"do...while循環結果:"
+s);
//變量值還原
s =
0
;
//3.for循環
for
(i =
1
; i <=
100
; i+=
2
) {
s += i;
}
System.out.println(
"for循環結果:"
+s);
}
|
執行結果:
從上面的語法應該可以看出,循環主要有四個點:初值、條件、步長、循環體(內容)。那么這三種循環的語法有什么區別呢?
while循環:側重於不確定循環次數的場合,先判斷,如果條件成立則進入循環。
do...while循環:側重於不確定循環次數的場合,先執行一次,之后如果條件成立則時入循環。
for循環:側重於確定循環次數的場合。
與循環配合使用的還有兩個關鍵字:continue和break;
他們的作用,看代碼和結果吧:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public
static
void
main(String[] args) {
for
(
int
i =
0
; i <
10
; i++) {
if
(i==
5
){
continue
;
}
System.out.print(i+
","
);
}
System.out.println(
"\n======================="
);
for
(
int
i =
0
; i <
10
; i++) {
if
(i==
5
){
break
;
}
System.out.print(i+
","
);
}
}
|
結果:
注意到兩個的區別了吧
運行continue后,就不再執行循環里面continue后面的代碼,直接運行i++去了。
而運行break后,則直接跳出了循環,后面的都不執行了。
經典案例:登錄功能,如果賬號密碼輸入正確則登錄成功,否則請再次輸入密碼。
分析:
登錄時要輸入幾次賬號密碼?很明顯不知道啊!!!所以for循環被排除了。
然后再判斷,是要先輸入賬號密碼后判斷,還是先判斷后再輸入賬號密碼呢?
這也很明顯,要先輸入了才需要判斷啊!!!所以while循環也被排除了。
最后就剩下do...while循環了。代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
public
static
void
main(String[] args) {
//模擬登錄功能
//分析過程:
//1.定義保存賬號和密碼的變量
Scanner input =
new
Scanner(System.in);
String inLoginID;
String inLoginPWD;
//2.因為還沒學習數據庫,所以定義兩個變量保存正確的賬號和密碼
String loginID =
"liergou"
;
String loginPWD =
"haha250"
;
//3.輸入賬號和密碼
do
{
System.out.print(
"請輸入賬號:"
);
inLoginID = input.next();
System.out.print(
"請輸入密碼:"
);
inLoginPWD = input.next();
//4.判斷輸入的賬號和密碼與正確的是否相同(判斷字符串是否相等使用equals方法),
//如果相同等提示登錄成功,循環結束,否則提示重新輸入
if
(inLoginID.equals(loginID) && inLoginPWD.equals(loginPWD)){
System.out.println(
"登錄成功!"
);
break
;
}
else
{
System.out.println(
"賬號和密碼不匹配,請重新輸入!"
);
}
}
while
(
true
);
}
|
如果你非要使用while和for,那··············當然也是可以滴,只不過代碼復雜度會上升,特別是使用for來寫的話會很奇怪,大伙可以看看:
這是使用while的寫法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
public
static
void
main(String[] args) {
//模擬登錄功能
//分析過程:
//1.定義保存賬號和密碼的變量
Scanner input =
new
Scanner(System.in);
String inLoginID;
String inLoginPWD;
//2.因為還沒學習數據庫,所以定義兩個變量保存正確的賬號和密碼
String loginID =
"liergou"
;
String loginPWD =
"haha250"
;
//3.輸入賬號和密碼
System.out.print(
"請輸入賬號:"
);
inLoginID = input.next();
System.out.print(
"請輸入密碼:"
);
inLoginPWD = input.next();
while
(
true
){
//4.判斷輸入的賬號和密碼與正確的是否相同(判斷字符串是否相等使用equals方法),
// 如果相同等提示登錄成功,循環結束,否則提示重新輸入
if
(inLoginID.equals(loginID) && inLoginPWD.equals(loginPWD)){
System.out.println(
"登錄成功!"
);
break
;
}
else
{
System.out.println(
"賬號和密碼不匹配,請重新輸入!"
);
//下面的代碼重復了
System.out.print(
"請輸入賬號:"
);
inLoginID = input.next();
System.out.print(
"請輸入密碼:"
);
inLoginPWD = input.next();
}
}
}
|
下面是使用for的寫法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
for
(;
true
;){
//4.判斷輸入的賬號和密碼與正確的是否相同(判斷字符串是否相等使用equals方法),
// 如果相同等提示登錄成功,循環結束,否則提示重新輸入
if
(inLoginID.equals(loginID) && inLoginPWD.equals(loginPWD)){
System.out.println(
"登錄成功!"
);
break
;
}
else
{
System.out.println(
"賬號和密碼不匹配,請重新輸入!"
);
//下面的代碼重復了
System.out.print(
"請輸入賬號:"
);
inLoginID = input.next();
System.out.print(
"請輸入密碼:"
);
inLoginPWD = input.next();
}
}
|
最后,再布置幾個練習,各位看官自己分析並練習練習吧,看具體使用哪種循環最好。
1. 打印出所有的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數本身。例如:153是一個"水仙花數",因為153=1的三次方+5的三次方+3的三次方。
2. 將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。
3. 球從100M高度自由落下,每次落地后反跳回原高度的一半,再落下,求它在第10次落地時,共經過多少M?第10次反彈多高?
4. 任意輸入一個整數(小於6位),求它的位數詢問
5. “我愛你,嫁給我吧?”,選擇“你喜歡我嗎?(y/n):",如果輸入為y則打印”我們形影不離“,若輸入為n,則繼續詢問
“軟件思維”博客地址:51CTO,博客園,感興趣的小伙伴可以去看相關的其它博文。