前言
人腦比電腦更具思考能力,但重複的工作時間一長,人類就比不上電腦了!繁雜的事情就交給電腦處理,如何安排工作就交給人腦吧!
一、判斷式
電腦執行是一個指令一個指令按照順序執行下去,是不會轉彎的~ 使用判斷式讓程式轉彎吧!
1.1 if 判斷式
◉ if{ }
◉ if{ ... }else{ ... }
◉ if{ ... }else if{ ... }
◉ if{ ... }else if{ ... }else if{ ... }
◉ if{ ... }else if{ ... }else if{ ... }else{ ... }
◉ 只有一句需要執行的語句時,可以省略{}
import java.util.Scanner;
class Test3{
public static void main(String[] arg){
int one=0,two=0;
Scanner sc=new Scanner(System.in);
System.out.println("請輸入第一數:");
one = sc.nextInt();
System.out.println("請輸入第二數:");
two = sc.nextInt();
if(one==two){
System.out.println(one + "等於" + two);
}else{
if(one > two){
System.out.println(one + "大於" + two);
}else{
System.out.println(one + "小於" + two);
}
}
}
}
Scanner 為 Java API,用來讀取資料。
new Scanner(System.in) 建立 Scanner 實例,括號內的 System.in 說明資料來源是從鍵盤輸入。
import java.util.Scanner; 在 Java 中我們使用 . 表示層次結構,所以此聲明將表示 java\util\Scanner。完整的意思是引入 java 資料夾中 util 資料夾中的 Scanner 類別。
輸入兩個數字,根據輸入的兩個數字來決定輸出哪一條語句。

上述的程式碼第10行~第20行可以改寫成 if{ ... }else if{ ... }else{ ... } 形式。
xxxxxxxxxx
if(one==two){
System.out.println(one + "等於" + two);
}else if(one > two){
System.out.println(one + "大於" + two);
}else{
System.out.println(one + "小於" + two);
}
還有幾個 if 的範例可以參考~
◉ 測量體重是否標準
xxxxxxxxxx
import java.util.Scanner;
class Test4{
public static void main(String[] arg){
boolean sex = false;
double hight=0.0,weight=0.0,norm=0.0,max=0.0,min=0.0;
Scanner sc = new Scanner(System.in);
System.out.println("§測量您的體重是否標準!(男女計算方式不同)§");
System.out.println("請輸入您的身高(公分):");
hight = sc.nextDouble();
System.out.println("請輸入您的體重(公斤):");
weight = sc.nextDouble();
System.out.println("請輸入您的性別(男生:false,女生:true):");
sex = sc.nextBoolean();
if(sex){
norm = (hight-70.0)*0.6;
System.out.println("使用女生標準體重計算");
}else{
norm = (hight-80.0)*0.7;
System.out.println("使用男生標準體重計算");
}
max = norm*1.1;
min = norm*0.9;
System.out.println("您的身高:"+ hight+"公分,標準體重:"+norm);
System.out.println("您的標準體重範圍:"+min+"至"+max+"之間");
if(weight > max){
System.out.println("您的體重:過重");
}else if(weight < min){
System.out.println("您的體重:過輕");
}else{
System.out.println("您的體重:標準");
}
}
}
◉ 測量體重是否標準(不分男女)
xxxxxxxxxx
import java.util.Scanner;
class Test5{
public static void main(String[] arg){
double hight=0.0,weight=0.0,norm=0.0,max=0.0,min=0.0;
Scanner sc = new Scanner(System.in);
System.out.println("§測量您的體重是否標準!(不分男女)§");
System.out.println("請輸入您的身高(公分):");
hight = sc.nextDouble();
System.out.println("請輸入您的體重(公斤):");
weight = sc.nextDouble();
norm = (hight/100.0)*(hight/100.0)*22;
max = norm*1.1;
min = norm*0.9;
System.out.println("您的身高:"+ hight+"公分,標準體重:"+norm);
System.out.println("您的標準體重範圍:"+min+"至"+max+"之間");
if(weight > max){
System.out.println("您的體重:過重");
}else if(weight < min){
System.out.println("您的體重:過輕");
}else{
System.out.println("您的體重:標準");
}
}
}
◉ 測量體重是否標準(BMI)
xxxxxxxxxx
import java.util.Scanner;
class Test6{
public static void main(String[] arg){
boolean sex = false;
double hight=0.0,weight=0.0,max=0.0,min=0.0,bmi=0.0;
Scanner sc = new Scanner(System.in);
System.out.println("§測量您的體重是否標準!(使用BMI)§");
System.out.println("請輸入您的身高(公分):");
hight = sc.nextDouble();
System.out.println("請輸入您的體重(公斤):");
weight = sc.nextDouble();
bmi = weight/((hight/100.0)*(hight/100.0));
max = 24.0;
min = 18.5;
System.out.println("您的身高:"+ hight+"公分,BMI值:"+bmi);
System.out.println("標準BMI範圍:"+min+"至"+max+"之間");
if(bmi > max){
System.out.println("您的體重:過重");
}else if(bmi < min){
System.out.println("您的體重:過輕");
}else{
System.out.println("您的體重:標準");
}
}
}
1.2 switch 判斷式
◉ switch(X){
case y1:
...
[break;]
case y2:
...
[break;]
default:
...
}
◉ X 可以使用的型態為:byte、short、char、int、Enum Type、String、Character、Byte、Short 和 Integer。
◉ 小心 case 穿透,需要配合 break 語句。
◉ 多個 case 可以合併。
◉ default 可以省略,但不推薦省略。
xxxxxxxxxx
import java.util.Scanner;
class Test7{
public static void main(String[] arg){
int month=0;
Scanner keyin=new Scanner(System.in);
System.out.println("請輸入月份:");
month = keyin.nextInt();
switch(month){
case 1:
System.out.println(month+"月是冬季");
break;
case 2:
System.out.println(month+"月是春季");
break;
case 3:
System.out.println(month+"月是春季");
break;
case 4:
System.out.println(month+"月是春季");
break;
case 5:
System.out.println(month+"月是夏季");
break;
case 6:
System.out.println(month+"月是夏季");
break;
case 7:
System.out.println(month+"月是夏季");
break;
case 8:
System.out.println(month+"月是秋季");
break;
case 9:
System.out.println(month+"月是秋季");
break;
case 10:
System.out.println(month+"月是秋季");
break;
case 11:
System.out.println(month+"月是冬季");
break;
case 12:
System.out.println(month+"月是冬季");
break;
default :
System.out.println("月份錯誤");
}
}
}

相同語句可以合併,我們把 1 月搬移到 12 月後,刪除某些 break 斷點,簡化程式碼,如下所示:
xxxxxxxxxx
import java.util.Scanner;
class Test8{
public static void main(String[] arg){
int month=0;
Scanner keyin=new Scanner(System.in);
System.out.println("請輸入月份:");
month = keyin.nextInt();
switch(month){
case 2:
case 3:
case 4:
System.out.println(month+"月是春季");
break;
case 5:
case 6:
case 7:
System.out.println(month+"月是夏季");
break;
case 8:
case 9:
case 10:
System.out.println(month+"月是秋季");
break;
case 11:
case 12:
case 1:
System.out.println(month+"月是冬季");
break;
default :
System.out.println("月份錯誤");
}
}
}
還有幾個 switch 的範例可以參考~
◉ 判斷月份有幾天
xxxxxxxxxx
import java.util.Scanner;
class Test9{
public static void main(String[] arg){
int month=0;
Scanner keyin=new Scanner(System.in);
System.out.println("請輸入月份:");
month = keyin.nextInt();
//在寫switch判斷前,先分類簡化。
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(month+"月是大月有31天");
break;
case 2:
System.out.println(month+"月是小月有28天");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println(month+"月是小月有30天");
break;
default :
System.out.println("月份錯誤");
}
}
}
◉ 四則運算,判斷運算符號
xxxxxxxxxx
import java.util.Scanner;
class Test10{
public static void main(String[] arg){
int one=0,two=0;
String str="";
Scanner keyin=new Scanner(System.in);
System.out.println("請輸入 某數 [+,-,*,/] 某數:");
one=keyin.nextInt();
str=keyin.next();
two=keyin.nextInt();
switch(str){
case "+":
System.out.println(one+" "+str+" "+two+" = "+(one+two));
break;
case "-":
System.out.println(one+" "+str+" "+two+" = "+(one-two));
break;
case "*":
System.out.println(one+" "+str+" "+two+" = "+(one*two));
break;
case "/":
//別忘記除數不能等於0
if(two!=0){
System.out.println(one+" "+str+" "+two+" = "+(one/two)+"..."+(one%two));
}else{
System.out.println("除數為0,無法運算!");
}
break;
default :
System.out.println("運算符號錯誤");
}
}
}
二、循環語句
有時候事情要做很多次,或每次只有一點點的差異時,就請電腦傻傻的快速完成它吧!
2.1 while 循環語句

不知道何時終止,使用 while 迴圈。
先判斷邏輯表達式的值。若為 true 則執行其後面的語句,然後再次判斷條件並反覆執行,直到條件不成立為止。
xxxxxxxxxx
class Loop1{
public static void main(String[] arg){
int i=1;
//前測式迴圈
System.out.println("前測式迴圈");
while(i<=5){
System.out.println(i);
i++;
}
}
}

2.2 do while 循環語句

不知道何時終止,且至少要執行一次的,使用 do while 迴圈。
先執行語句,再判斷邏輯表達式的值。若為 true 再執行語句,否則結束迴圈。
xxxxxxxxxx
class Loop2{
public static void main(String[] arg){
int i=1;
//後測式迴圈
System.out.println("後測式迴圈");
do{
System.out.println(i);
i++;
}while(i<=5);
}
}

2.3 for 循環語句

如果知道執行的次數,我們將使用 for 迴圈。
首先執行(1)初始化迴圈的控制變數後,就重複執行(2) → (3) → (4)。
xxxxxxxxxx
class Loop3{
public static void main(String[] arg){
int i=1;
//for迴圈
System.out.println("for迴圈");
for(i=1; i<10; i++){
System.out.println(i);
}
}
}

for 迴圈中(1)、(2)、(4)表達式不一定要放在括號內,接下來要來討論特殊的寫法。
◉ 省略初值與遞增式
xxxxxxxxxx
class Loop4{
public static void main(String[] arg){
int i=1;
//省略初值與遞增式
System.out.println("省略初值與遞增式");
for(;i<=5;){
System.out.println(i);
i++;
}
}
}
◉ 省略判斷式
(請按 Ctrl + C 停止程式)
xxxxxxxxxx
class Loop5{
public static void main(String[] arg){
int i=1;
//無窮迴圈。省略判斷式,Java自動把空的判斷式填上true。
System.out.println("無窮迴圈。省略判斷式,Java自動把空的判斷式填上true。");
for(i=1;;i+=20000){
System.out.println(i);
}
}
}

2.4 break 和 continue 語句
◉ break 語句用於終止某個語句的執行。用在循環語句中,可以強行退出迴圈。
xxxxxxxxxx
class Loop6{
public static void main(String[] arg){
int i;
System.out.println("break的使用:");
for(i=1;i<=5;i++){
if(i==3){
break;
}
System.out.println(i);
}
}
}

◉ continue 語句用在循環語句中,用於終止某次循環過程,跳過迴圈中 continue 語句下面未執行的循環,開始下一次循環過程。
xxxxxxxxxx
class Loop7{
public static void main(String[] arg){
int i;
System.out.println("continue的使用:");
for(i=1;i<=5;i++){
if(i==3){
continue;
}
System.out.println(i);
}
}
}

三、綜合運用
混合判斷式與循環語句,會擦出什麼火花呢?
3.1 當循環語句碰到 switch
◉ 在 switch 內加上 continue。(功能正常)
xxxxxxxxxx
class Loop8{
public static void main(String[] arg){
int i;
System.out.println("continue的使用:");
for(i=1;i<=5;i++){
switch(i){
case 3:
continue;
}
System.out.println(i);
}
}
}

◉ 在 switch 內加上 break。(無法跳出迴圈)
xxxxxxxxxx
class Loop9{
public static void main(String[] arg){
int i;
System.out.println("break的使用:");
//這邊的break只給switch使用,for使用不到。
for(i=1;i<=5;i++){
switch(i){
case 3:
break;
}
System.out.println(i);
}
}
}

◉ 如果在 switch 內加上 break 時,想要跳出迴圈,必須搭配「標籤」名稱使用。
xxxxxxxxxx
class Loop10{
public static void main(String[] arg){
int i;
System.out.println("break的使用,搭配標籤名稱:");
//標籤必須寫在for之前,且與for之間不能有任何程式碼。
KS:
for(i=1;i<=5;i++){
switch(i){
case 3:
break KS;
}
System.out.println(i);
}
}
}

3.2 兩層迴圈與 break
◉ 只跳出內迴圈
xxxxxxxxxx
class Loop11{
public static void main(String[] arg){
int i,j;
System.out.println("只跳出內迴圈");
for(i=1;i<=5;i++){
for(j=1;j<=5;j++){
if(j==3){
break;//只跳出內迴圈
}
System.out.print("*");
}
System.out.println("\n-----------");
}
}
}

◉ 加上標籤名稱
xxxxxxxxxx
class Loop12{
public static void main(String[] arg){
int i,j;
System.out.println("加上標籤名稱");
gs: //標籤名稱
for(i=1;i<=5;i++){
for(j=1;j<=5;j++){
if(j==3){
break gs;
}
System.out.print("*");
}
System.out.println("\n-----------");
}
}
}

◉ 加上標籤名稱 + 大括號
xxxxxxxxxx
class Loop13{
public static void main(String[] arg){
int i,j;
//標籤+上大括號,會直接轉跳到標籤大括號之後。
System.out.println("加上標籤名稱,但標籤自己有個大括號");
gs:{ //標籤名稱,但有大括號
for(i=1;i<=5;i++){
for(j=1;j<=5;j++){
if(j==3){
break gs;
}
System.out.print("*");
}
System.out.println("\n-----------");
}
System.out.println("\n接在「外層迴圈」之後");//此行不會執行。
}
System.out.println("\n接在「標籤大括號」之後");
}
}

3.3 一些綜合範例
◉ 分數使用等第(A、B、C、D、E)
xxxxxxxxxx
import java.util.Scanner;
class ScoreRange{
public static void main(String[] arg){
Scanner keyin = new Scanner(System.in);
int scores=0;
//檢查使用者輸入的資料是否不符合說明
do{
System.out.println("請輸入一個分數(0~100):");
scores = keyin.nextInt();
}while(scores<0 || scores>100);
//把分數區間除以10,要不然要列100個case。
switch(scores/10){
case 10:
case 9:
System.out.println("A");
break;
case 8:
System.out.println("B");
break;
case 7:
System.out.println("C");
break;
case 6:
System.out.println("D");
break;
default:
System.out.println("E");
}
}
}
◉ 找尋三位數的阿姆斯壯數
xxxxxxxxxx
class ArmstrongNumber{
public static void main(String[] arg){
int i,a=0,b=0,c=0;
System.out.println("三位數的阿姆斯壯數:");
for(i=100;i<=999;i++){
a=i%10;
b=(i/10)%10;
c=i/100;
if(i==a*a*a+b*b*b+c*c*c){
System.out.println(i);
}
}
}
}
◉ 骰骰子,統計各點數出現的次數
xxxxxxxxxx
class Dice{
public static void main(String[] arg){
int i,now,N1=0,N2=0,N3=0,N4=0,N5=0,N6=0;
System.out.println("骰骰子6000次,統計點數出現的次數:");
for(i=0;i<6000;i++){
now = ((int)(Math.random()*6))+1; //Math.random()的值介於0.000000000000001~0.999999999999999。小數有15位。
switch(now){
case 1:
N1++;
break;
case 2:
N2++;
break;
case 3:
N3++;
break;
case 4:
N4++;
break;
case 5:
N5++;
break;
case 6:
N6++;
break;
default:
System.out.println("出現的點數不是1~6");
}
}
System.out.println("骰子1出現次數:"+N1);
System.out.println("骰子2出現次數:"+N2);
System.out.println("骰子3出現次數:"+N3);
System.out.println("骰子4出現次數:"+N4);
System.out.println("骰子5出現次數:"+N5);
System.out.println("骰子6出現次數:"+N6);
}
}
總結
判斷式:if、switch
循環語句: while、do while、for,控制迴圈的兩個指令 continue 與 break
標籤名稱:
流程控制可以讓程式照著自己的想法彈性運作,好好掌握基礎語法後,就可以把想法實現出來唷!
沒有留言:
張貼留言