● 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);
}
}
}
 
arrow
arrow

    muchone 發表在 痞客邦 留言(0) 人氣()