配套視頻教程
幾個問題
張三oracle考試成績未達到自己的目標。為了表明自己勤奮學習的決心,他決定寫一百遍“好好學習,天天向上!”
循環結構語法
特點:先判斷,再執行
實現打印50份試卷
分析是否包含重復操作?
使用while循環的步驟
- 確定循環條件和循環操作
- 套用while語法寫出代碼
- 檢查循環是否能夠退出
一個練習
老師每天檢查張三的學習任務是否合格,如果不合格,則繼續進行。
老師給張三安排的每天的學習任務為:上午閱讀教材,學習理論部分,下午上機編程,掌握代碼部分。
- 分析是否存在重復操作
- 使用while循環實現
- 確定循環條件和循環操作
- 套用while語法寫出代碼
- 檢查循環是否能夠退出
提示:判斷字符串是否相等使用equals函數
String input = "no";
while(input.equals("no"))
{
System.out.println("合格了嗎?(yes/no):");
Scanner scanner = new Scanner(System.in);
//接收用戶輸入
input = scanner.next();
if(input.equals("no"))//說明不合格
{
System.out.println("學習學習");
}
}
System.out.println("完成學習任務");
練習二
2012年培養學員10萬人,每年增長20%,請問按此增長速度,到哪一年培訓學員人數將達到100萬人?
提示:循環條件和循環操作分別是什么?
2、2013年培訓學員數量 = 100000 * (1 + 0.2 )
3、int year = 2012;
double students = 100000;
while …
public class whileDemo2 {
public static void main(String[] args) {
// 2012年培養學員10萬人,每年增長20%,
// 請問按此增長速度,到哪一年培訓學員人數將達到100萬人?
int year = 2012;
double personCount = 100000;
while(personCount <= 1000000)
{
//增加年數
year++;
//增加人數(1.2)
personCount = personCount*1.2;
System.out.println(year+"年"+personCount+"人");
}
System.out.println(year);
}
}
程序調試
在編寫程序過程中有時也出現錯誤,但不好發現和定位錯誤,有沒有好的方法呢?
- 通過代碼閱讀或者加輸出語句查找程序錯誤
-
當程序結構越來越復雜時,需要專門的技術來發現和定位錯誤,就是“程序調試”
image.png
調試例子
順序輸出1~5這5個數字
int i = 1;
System.out.println("程序調試演示,注意觀察i的值:");
while(i < 5){
System.out.println(i);
i++;
}
調試解決問題
調試練習
編程實現:計算100以內(包括100)的偶數之和
設置斷點并調試程序,觀察每一次循環中變量值的變化
int i = 1;
int total = 0;
while(i <= 100)
{
if(i%2==0)//說明是偶數
{
total = total + i;
}
i++;
}
System.out.println(total);
另一個問題(do-while循環)
經過幾天的學習,老師給張三一道測試題,
讓他先上機編寫程序完成,
然后老師檢查是否合格。如果不合格,則繼續編寫。……
特點:先執行,再判斷
while循環和do-while循環的區別
- 執行次序不同
- 初始情況不滿足循環條件時
while循環一次都不會執行
do-while循環不管任何情況都至少執行一次
作業
實現整數反轉 用戶輸入任意一個數字比如12345,程序輸出54321
要求用循環實現,并練習調試技巧
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入一個數");
int num = scanner.nextInt();
//12345模10能到最后一位,輸出它,再除以10,1234
//重復上一步
while(num>0)
{
//12345模10能到最后一位,輸出它,再除以10,1234
System.out.print(num % 10);
num = num / 10;
}
問題回顧 輸出100次“好好學習!”
for循環的語法和執行順序
問題
循環輸入某同學高考考試的5門課成績,并計算平均分
分析
循環次數固定
使用for循環結構的步驟
1、分析循環條件和循環操作
2、套用for語法寫出代碼
3、檢查循環是否能夠退出
循環條件:循環的次數不足5,繼續循環
循環操作:錄入成績,計算成績之和
public class whileDemo2 {
public static void main(String[] args) {
//循環輸入某同學高考考試的5門課成績,并計算平均分
Scanner scanner = new Scanner(System.in);
System.out.println("輸入學生姓名");
String name = scanner.next();
int score = 0;
int total = 0;
for(int i = 1; i <= 5; i++)
{
System.out.println("請輸入"+i+"成績");
score = scanner.nextInt();
total = total + score;
}
System.out.println(name+"的平均成績是"+total/5);
}
}
輸出如圖所示加法表
使用for循環:
1、循環初始化:i = 0;j = 輸入值
2、循環條件:i<=輸入值
3、循環操作:計算i+j
4、循環變量的改變:i++,j--
public class whileDemo2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入一個值");
int num = scanner.nextInt();//6
int j = num;
for(int i = 0; i <= num; i++)
{
System.out.println(i+"+"+j+"="+num);
j--;
}
}
}
練習
求1~100之間不能被3整除的數之和
提示:
1、循環條件:i<100
2、循環操作:if (i % 3 != 0) {
sum = sum + i;
}
計算100以內的奇數之和
設置斷點調試程序,追蹤3個表達式的執行順序及循環變量的變化
回顧break語句
break:改變程序控制流
用于do-while、while、for中時,可跳出循環而執行循環后面的語句
練習
循環錄入某學生5門課的成績并計算平均分,如果某分數錄入為負,停止錄入并提示錄入錯誤
分析
循環錄入成績,判斷錄入正確性:錄入錯誤,使用break語句立刻跳出循環;否則,累加求和
public class whileDemo2 {
public static void main(String[] args) {
//循環輸入某同學高考考試的5門課成績,并計算平均分
Scanner scanner = new Scanner(System.in);
System.out.println("輸入學生姓名");
String name = scanner.next();
int score = 0;
int total = 0;
boolean error = false;//假設用戶錄入沒錯誤
for(int i = 1; i <= 5; i++)
{
System.out.println("請輸入"+i+"成績");
score = scanner.nextInt();
if(score<0 || score>100)
{
error = true;//用戶錄入有誤
break;
}
total = total + score;
}
if(error == false)
{
System.out.println(name+"的平均成績是"+total/5);
}
else
{
System.out.println("錄入有誤");
}
}
}
1~10之間的整數相加,得到累加值大于20的當前數
提示
1、使用循環進行累加,從1到10
2、判斷累加值是否大于20
3、如果大于20,則跳出循環,并打印當前值
int total = 0;
int i = 1;
for(i=1; i <=10; i++)
{
total = total + i;
if(total > 20)
{
break;
}
}
System.out.println(i);
continue語句
continue 作用:跳過循環體中剩余的語句而執行下一次循環
循環錄入Java課的學生成績,統計分數大于等于80分的學生比例
1、通過循環,獲得分數大于等于80分的學生人數num
2、判斷:如果成績<80,不執行num++,直接進入下一次循環
- break語句終止某個循環,程序跳轉到循環塊外的下一條語句
- continue跳出本次循環,進入下一次循環
public static void main(String[] args) {
// 循環錄入Java課的學生成績,
// 統計分數大于等于80分的學生比例
//5次成績里,大于等于80分的次數
int count = 0;
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入班級總人數");
int personCount = scanner.nextInt();
for(int i = 1; i <= personCount; i++)
{
System.out.println("請輸入第" + i + "次成績");
//保存本次成績
int score = scanner.nextInt();
//如果成績小于80的話,跳出本次循環
//即不累加次數
if(score < 80)
{
continue;
}
count++;//累加成績大于等于80的次數
}
System.out.println("80分以上學生人數為" + count);
// double rate = (double) count/personCount;
}
}
求1~10之間的所有偶數和
提示
1、使用循環進行累加,循環的范圍是從1至10
2 、判斷當前數是否為偶數
3 、如果為奇數跳過,執行下一個循環,如果為偶數,進行累加