● Loop迴圈,重複結構(連續)
(一)for(1;2;3){
重複連續步驟.....
}
1=>次數索引變數,要給初始值
2=>判斷loop是否停止或繼續做
=>true:執行
false:停止
*這邊2不一定要跟1有關,可以用迴圈之外的變數做判斷
2其實和if是一樣的意思,所以可以用多個條件,但是不建議
3=>設計如何讓loop停止的規則=>計算是與2有關
ex1:
for(int x=1;x<6;x++){
System.out.println("x="+x+"\thello");
}
ex2:
int y=2;
for(int x=0; x<=50 && y<=30 ; x+=2 , y++){
System.out.println("x="+x+"\thello");
}
*這邊因為當x++超過50時,就變成false &&中斷機制發揮
,所以也不會再去判斷y<=30
x++後面要加上,才能加第二個條件
int y的宣告也可以放在for迴圈中
,變成 for(int x=0 , y=2; x<=50 && y<=30 ; x+=2 , y++)
但建議for的條件不要設得太複雜
ex3:
for(int x=0,y=0; x<=100 && y<=30 ;){
System.out.println("x="+x+"\thello");
x=x+2;
x=2*x+1;
y=3*x-1;
} /
/outputs
x=0 hello
x=5 hello
*也可以3的設定停止規則不寫,改放到迴圈中,如上述例子
ex4:
java.util.Scanner sc = new java.util.Scanner(System.in);
int n=sc.nextInt();
for(int x=0;x<=n;x++){
System.out.println("x="+x+"\thello");
}
(二)while(條件式){ 步驟..... }=>條件式(true/false)
=>不確定總次數為多少時使用
ex:
int x=1;
while(x<=10){
System.out.println("x="+x+"\thello");
x++;
}
*while的條件式只能放一個,且不能定義變數,變數要先在外面定義好
while的停止規則要放在{}中
(三)do{ 步驟.... }while(條件式);
=>和while的差別在於,當條件不符合時
,do...while會執行一次才停, while不會執行
=>判斷式的起始值如果是固定值,兩者就會相同,
但如果起始值是個不確定數(變數),結果就可能會不同
ex:
int x=1;
do{
System.out.println("x="+x+"\thello");
x++;
}while(x<=10);
(四)break(符合條件就停止)和contiune(不執行符合條件的那一次,其他繼續,只能在loop中使用)
ex:
java.util.Scanner sc = new java.util.Scanner(System.in);
int n=sc.nextInt();
for(int x=0;x<=n;x++){
if(x==51) break;
System.out.println("x="+x+"\thello");
}
*break要搭配if來使用,如果這邊條件設定為if(n==51) break;
代表當n輸入為51時才會break,輸入52還是會跑52個迴圈
for/do...while/while可以在{}內加另外的條件設定
ex1:
java.util.Scanner sc = new java.util.Scanner(System.in);
int n=sc.nextInt();
for(int x=0;x<=n;x++){
if(x==51) continue;
System.out.println("x="+x+"\thello");
}
*continue要搭配if來使用,執行時會直接跳過x==51不做,往下繼續做,如下圖

ex2:
java.util.Scanner sc = new java.util.Scanner(System.in);
int n=sc.nextInt();
for(int x=0;x<=n;x++){
if(x>=41 && x<=51) continue;
if(x>=71 && x<=80) continue;
if(x==101) break;
System.out.println("x="+x+"\thello");
}
*當x在41~51中跳過,x在71~80中也跳過,x=101後停止執行,如下圖



(五)label標籤=>與巢狀迴圈搭配使用
=>類似網頁的錨點功能,作為位置的標記
=>java的標記功能只能用在loop,針對loop給一個編碼(可任意取名字)
=>做法為在迴圈的前一行給個代號,如: a:
ex:九九乘法表
for(int x=1;x<=9;x++){
for(int y=1;y<=9;y++){
System.out.print(x+"*"+y+"="+(x*y)+"\t");
}
System.out.println();
}

* System.out.print()是不換行, System.out.println()是要換行,
且可單獨列出來不帶入內容作為換行之用
所有的regular expression都是針對字串使用,所以都要加上""
ex:
java.util.Scanner sc = new java.util.Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
for(int x=1;x<=n;x++){
for(int y=1;y<=m;y++){
System.out.print(x+"*"+y+"="+(x*y)+"\t");
}
System.out.println();
*當n=4,m=7時,結果如下圖,可以知道,
第一個for決定多少列(橫),第二個for決定多少欄(直)

ex:
java.util.Scanner sc = new java.util.Scanner(System.in);
System.out.println("請輸入列數");
int n=sc.nextInt();
System.out.println("請輸入欄數");
int m=sc.nextInt();
for(int x=1;x<=n;x++){
for(int y=1;y<=m;y++){
System.out.print(" *");
}
System.out.println();
}
*可以用*做表格,如下圖

ex:
java.util.Scanner sc = new java.util.Scanner(System.in);
System.out.println("請輸入列數");
int n=sc.nextInt();
System.out.println("請輸入欄數");
int m=sc.nextInt();
for(int x=1;x<=n;x++){
for(int y=1;y<=m;y++){
if(x==7) break;
if(y==8) break;
System.out.print(x+"*"+y+"="+(x*y)+"\t");
}
System.out.println();
}

*break的限制條件:當遇到巢狀迴圈時,break只能控制所在的那一層迴圈停止
所以上述例子,只停了x=7*1 ,7*2 ,7*3...那一層
調整的作法有兩種:
(一)把 if(x==7) break;拉到上一層迴圈(迴圈很多層的時候容易出問題)
for(int x=1;x<=n;x++){
if(x==7) break;
for(int y=1;y<=m;y++){
if(y==8) break;
System.out.print(x+"*"+y+"="+(x*y)+"\t");
}
System.out.println();
}
(二)使用label
java.util.Scanner sc = new java.util.Scanner(System.in);
System.out.println("請輸入列數");
int n=sc.nextInt();
System.out.println("請輸入欄數");
int m=sc.nextInt();
a:
for(int x=1;x<=n;x++){
b:
for(int y=1;y<=m;y++){
if(x==7) break a;
if(y==8) break;
System.out.print(x+"*"+y+"="+(x*y)+"\t");
}
System.out.println();
}
* if(x==7) break a;代表把迴圈從標記為a的那一層開始使用停止條件
實作練習
(一)找零錢程式(尺:26元/筆:39元/圓規:45元)
1.需求:
a)使用者輸入數量(X,Y,Z)=>計算總價(Sum)(應付)
b)輸入使用者付款金額(pay)=>計算找零多少元?

class ex3{
public static void main(String args[]){
java.util.Scanner sc = new java.util.Scanner(System.in);
int pay,sum;
System.out.println("請輸入尺的數量");
int x=sc.nextInt();
System.out.println("請輸入筆的數量");
int y=sc.nextInt();
System.out.println("請輸入圓規的數量");
int z=sc.nextInt();
sum=26*x+39*y+45*z;
System.out.println("一共"+sum+"元\n");
System.out.println("請輸入付款金額");
pay=sc.nextInt();
System.out.println("找你"+(pay-sum)+"元");
}
}
*變數可以一次定義多個,用","隔開即可
class ex3{
public static void main(String args[]){
java.util.Scanner sc = new java.util.Scanner(System.in);
int pay,sum;
System.out.println("請輸入尺的數量");
int x=sc.nextInt();
System.out.println("請輸入筆的數量");
int y=sc.nextInt();
System.out.println("請輸入圓規的數量");
int z=sc.nextInt();
sum=29*x+39*y+49*z;
System.out.println("一共"+sum+"元\n");
System.out.println("請輸入付款金額");
pay=sc.nextInt();
int h=(pay-sum)/100;
int t=(pay-sum-100*h)/10; //((pay-sum)%100)/10
int o=(pay-sum-100*h-10*t);//(pay-sum)%10
System.out.println("找你"+h+"張一百元\n");
System.out.println("找你"+t+"個十元\n");
System.out.println("找你"+o+"個元\n");
System.out.println("總共找你"+(pay-sum)+"元");
}
*上例變化,利用%算出百元、10元、1元個找多少
(二)設計一程式判斷是否錄取(學校)
需求:
1.輸入3科目=>國(chi)、英(eng)、數(math)
2.分2階段篩選
a)第一階段:總分滿200分(sum)
b)第二階段:數學75分=>兩階段都符合才錄取
程式要求:
1.輸入分數項目
2.判斷
a)是否錄取
b)不錄取的原因為何
=>第一階段未滿200
第二階段滿200,數學未達標

class ex4{
public static void main(String args[]){
java.util.Scanner sc = new java.util.Scanner(System.in);
System.out.println("請輸入國文分數");
int chi=sc.nextInt();
System.out.println("請輸入英文分數");
int eng=sc.nextInt();
System.out.println("請輸入數學分數");
int math=sc.nextInt();
int sum=chi+eng+math;
if(sum>=200){
if(math>=75){
System.out.println("總分:"+sum+"分,數學:"+math+"分,錄取!");
}else{
System.out.println("總分:"+sum+"分,數學:"+math+"分,未錄取!");
}
}else{
System.out.println("總分:"+sum+"分,數學:"+math+"分,未錄取!");
}
}
}
(三)等差數列(1+2+3+x+....+n=sum)
1.堆疊=>用總分作堆疊 (sum=sum+1=>sum+=1往上疊的概念)
2.迴圈
x=1=>sum=1
x=2=>sum=1+2=sum+2
x=3=>sum=1+2+3=sum+3
x=4=>sum=1+2+3+4=sum+4
導出公式=>sum=sum+x
class ex5{
public static void main(String args[]){
java.util.Scanner sc = new java.util.Scanner(System.in);
int sum=0;
int n=sc.nextInt();
for(int x=1;x<=n;x++){
sum=sum+x;
System.out.println("x="+x+"\tsum="+sum);
}
}
}
文章標籤
全站熱搜