標籤:注意 查詢 可見 漢字 測試 scanner 擷取 指派陳述式 順序
第六章
for文法:
for(運算式①;運算式②;運算式③){
//④迴圈操作
}
運算式含義:
運算式1:指派陳述式, 它用來給迴圈變數賦初值 例如:int i = 1;
運算式2:迴圈條件,一個關聯運算式, 它決定什麼時候退出迴圈 例如:i < 5;
運算式3:變數迭代 例如: i++
三個運算式均可省略,但分號不能省!!!!!
執行過程:
1.運算式1
2.判斷運算式2,如果為true,執行迴圈操作,否則退出迴圈,第三步不執行
3.迴圈操作執行完畢後,執行運算式3(迭代部分),改變迴圈變數值
4.依次重複步驟2~3,直到退出迴圈
運算式2滿足條件
if(運算式①;運算式②;④迴圈操作){
運算式③
}
執行流程:①---->②---->③---->④
--------------------------------------------------------------------------
注意事項:
for(;i<10;i++){
System.out.println("這是 "+i);
}
編譯錯誤:
變數 i 沒有初始化
--------------------------------------------------------------------------
for(int i=0;;i++){
System.out.println("這是 "+i);
}
編譯正確,但是缺少
迴圈條件,造成死迴圈
--------------------------------------------------------------------------
for(int i=0;i<10;){
System.out.println("這是 "+i);
}
i++;
編譯通過,但是迴圈變數的值無變化,
造成死迴圈
省略運算式3,在迴圈體內應設法改
變迴圈變數的值以結束迴圈
--------------------------------------------------------------------------
for(;;){
System.out.println("這是測試");
}
運算式全省略,無條件判斷,迴圈變數無改變,
應在迴圈體內設法結束迴圈;否則會造成死迴圈
--------------------------------------------------------------------------
//break是結束整個迴圈體,continue是結束單次迴圈
比方說:
while(x++ < 10){
if(x == 3){
break;
}
System.out.println("值:" + x);
}
結果是輸出 1 2 就退出了整個while迴圈
但是如果使用continue
while(x++ < 10){
if(x == 3){
continue;
}
System.out.println("值:"+ x);
}
結果是:1 2 4 5 6 7 8 9 10 可見他僅僅是不輸出3,因為他結束了本次迴圈
當迴圈執行到break語句時,就退出整個迴圈,然後執行迴圈外的語句 改變程式控制流程。
當迴圈語句執行到continue時,當次迴圈結束,重新開始下一輪迴圈。如果已經是最後一輪迴圈了,那麼這是的continue就與break效果一樣了。
到目前為止所學的迴圈結構有哪些?
文法區別:
while |do-while |for
while迴圈: |do{ |for(初始化;條件;迭代){
while(<條件>){ | //迴圈體 |//迴圈體
//迴圈體 |}while(<條件>); |}
| |
需要多次重複執行一個或多個任務的問題考慮使用迴圈來解決
無論哪一種迴圈結構,都有4個必不可少的部分:初始部分、迴圈條件、迴圈體、迭代部分
執行順序:
while 迴圈:先判斷,再執行
do-while迴圈:先執行,再判斷
for迴圈:先判斷,再執行
適用情況:
迴圈次數確定的情況,通常選用for迴圈
迴圈次數不確定的情況,通常選用while或do-while迴圈
for案例:
/**
*計算1到100的和
*/
public class Summation {
public static void main(String[] args) {
int sum = 0; //聲明變數sum存放計算的和,賦初值為0
for(int i=1;i<=100;i++)
sum +=i;//等價於語句sum=sum+score
System.out.println("sum="+sum);
}
}
/**
* 使用for 迴圈
* 輸入學生的5們功課,查詢該學生的總成績和平均分數
*/
import java.util.Scanner;
public class AverageScores {
public static void main(String[] args) {
int score; //聲明一個變數,取名為score,用來接收學生的成績值
int sum= 0; //聲明一個變數,取名sum,用來儲存學生的成績和
double avg =0.0; //聲明一個double類型的變數,用來接收計算出來的學生的平均分
Scanner sc = new Scanner(System.in); //擷取鍵盤輸入
System.out.println("請輸入學生的姓名:");
String name = sc.next(); //將擷取的輸入賦值給一個String類型的name變數
int i= 0; //聲明一個int類型的變數,賦初始值為0
for(;i<5;i++){ //迴圈5次錄入成績
System.out.println("請輸入5門功課的第"+(i+1)+"門的成績:");
score = sc.nextInt(); //錄入成績
sum += score; //等價於語句 sum=sum+score;
System.out.println(name+"的前"+(i+1)+"門功課的成績和是:"+sum);
}
System.out.println(name+"的總成績是:"+sum);
avg = sum/5; //計算平均成績
System.out.println(name+"的平均分是:"+avg);
}
變數為漢字
/**
* 使用for 迴圈
* 輸入學生的5們功課,查詢該學生的總成績和平均分數
*/
import java.util.Scanner;
public class 求學生的平均成績 {
public static void main(String[] args) {
int 單科成績;
int 總成績= 0;
double 平均分 =0;
Scanner 鍵盤輸入 = new Scanner(System.in);
System.out.println("請輸入學生的姓名:");
String 學生姓名 = 鍵盤輸入.next();
int i= 0;
for(;i<5;i++){
System.out.println("請輸入5門功課的第"+(i+1)+"門的成績:");
單科成績 = 鍵盤輸入.nextInt();
總成績 += 單科成績;
System.out.println(學生姓名+"的前"+(i+1)+"門功課的成績和是:"+總成績);
}
System.out.println(學生姓名+"的總成績是:"+總成績);
平均分 = 總成績/5;
System.out.println(學生姓名+"的平均分是:"+平均分);
}
}
Java 第六章