循環結構(for循環、while循環)
1、含義:
循環語句可以在滿足循環條件的情況下,反復執行某一段代碼,這段被重復執行的代碼被稱為循環體語句;
當反復執行這個循環體時,需要在合適的時候把循環判斷條件修改為false,從而結束循環,否則循環將一直執行下去, 形成死循環。
2、分類:
1、for循環
2、while循環
--do...while循環
3、循環語句的組成
①初始化語句:
一條或者多條語句,這些語句完成一些初始化操作。
②判斷條件語句:
這是一個boolean 表達式,這個表達式能決定是否執行循環體。
③循環體語句:
這個部分是循環體語句,也就是我們要多次做的事情。
④控制條件語句:
這個部分在一次循環體結束后,下一次循環判斷條件執行前執行。通過用於控制循環條件中的變量,使得循環在合適的時候結束。
for循環
1、for循環:
語句格式:
for(初始化語句;判斷條件語句;控制條件語句){
循環體語句;
}
2、執行流程:
(1)執行初始化語句,只執行了一遍
(2)執行判斷條件語句,看其結果是true還是false
如果是false,循環結束。
如果是true,繼續執行。
(3)執行循環體語句 //注意:第3步是執行循環體,而不是控制條件語句
(4)執行控制條件語句
(5)回到(2)繼續
3、例:打印10行HelloWorld
方法一:使用老方法
public class ForDemo1 {
public static void main(String[] args) {
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
System.out.println("HelloWorld");
方法二:利用for循環
public class ForDemo1 {
public static void main(String[] args) {
for(int i=1;i<=10;i++){
System.out.println("HelloWorld");
}
}
}
程序解釋:
①int i=1; 初始化值的作用,因為我們要打印10句HelloWorld,從第一次開始,所以我們需要定義一個變量 int類型的變量去開始計數,表示第幾次循環
②i<=10; 條件判斷語句,這個語句使用控制是否進入循環的條件
③i++ 控制循環體中的條件的變化,在這里表示的是,每循環一次,i++
4、 使用for循環的注意事項:
1、條件判斷語句只能是boolean類型
2、當循環體的語句只有一條的時候,可以省略大括號,如果循環體的語句有多條的時候,這時候需要添加大括 號,如果不添加循環語句只針對第一條語句有效(建議,永遠不要省略大括號)
3、如果在小括號后加分號,默認有一個空語句體,后面的代碼為正常的代碼塊,不參與循環
4、初始化語句可以不在for循環中的小括號中體現,但是必須在使用之前定義好
5、條件判斷語句可以刪除,但是刪除之后,就沒有了控制循環結束的條件,就變成了死循環
6、控制條件語句刪除之后,也變成了死循環,你可以刪除,但是初始化的變量的值一定
要在循環體中發生變化。
以下代碼等價於上述方法二的代碼 :
public static void main(String[] args) {
int i = 1;
for (;i <= 10; ) { //初始化語句可以不在for循環中的小括號中體現,
//但是必須在使用之前定義好
System.out.println("數加");
i++; //控制條件語句可以不在for循環中的小括號中,但是一定要放 //在循環體語句中
}
}
}
5、 //需求:利用for循環在控制台輸出1-10
public class ForTest1 {
public static void main(String[] args) {
for(int i = 1;i<=10;i++){
System.out.println(i);
}
}
}
執行結果如下:
1
2
3
4
5
6
7
8
9
10
Process finished with exit code 0
6、 //需求:利用for循環在控制台輸出10-1
public class ForTest2 {
public static void main(String[] args) {
for(int i =10;i>0;i--){
System.out.println(i);
}
}
}
執行結果如下:
10
9
8
7
6
5
4
3
2
1
Process finished with exit code 0
7、 //需求:利用for循環求1-10之和
public class ForTest3 {
public static void main(String[] args) {
int sum = 0; //定義一個變量接收1-10之和,初始值隨便給,一般情況下都是0
for(int i =1;i <=10;i++){ //獲取1-10的數據
sum = sum +i;
}
System.out.println(sum); //在if語句外來接收這個sum值
}
}
8、 //需求:求出1-100之間的偶數和
分析:
①偶數:與2整除,余數為0
②判斷是否為偶數:a%2==0
public class ForTest4 {
public static void main(String[] args) {
int sum =0; //第1步:先定義一個變量sum准備來接收他們的和
for(int i =1;i<=100;i++){ //第2步:獲取1-100的數據
if(i%2==0){ //第3步:使用if語句來判斷是否為偶數
sum = sum + i;
}
}
System.out.println(sum); //第4步:在for循環外,輸出sum
}
}
9、 //需求:求出1-100之間的奇數和
分析:
奇數:與2整除,余數為1
public class ForTest5 {
public static void main(String[] args) {
int sum =0; //第1步:先定義一個變量sum准備來接收他們的和
for(int i =1;i<=100;i++){ //第2步:獲取1-100的數據
if(i%2==1){ //第3步:使用if語句來判斷是否為奇數
sum = sum + i;
}
}
System.out.println(sum); //第4步:在for循環外,輸出sum
}
}
10、 //需求:求5的階乘
5!=1*2*3*4*5
public class ForTest6 {
public static void main(String[] args) {
int res = 1; //定義一個變量res來接收他們的相乘結果
//因為是相乘,所以定義res不能為0
for(int i =1;i<=5;i++){ //獲取1-5的數據
res = res * i;
}
System.out.println(res);
}
}
11、
//需求:請在控制台輸出滿足如下條件的五位數
個位等於萬位
十位等於千位
個位+十位+千位+萬位=百位
分析:
1、獲取10000-99999的數據
2、獲取獲取個位,十位,百位,千位,萬位
3、&&連接三個條件
public class ForTest7 {
public static void main(String[] args) {
for(int i =10000;i<=99999;i++){
int geWei = i%10; //獲取個位:與10進行取模
int shiWei = i/10%10; //獲取十位:先與10進行整除,再與10進行取模
int baiWei = i/10/10%10; //獲取百位:先與10進行兩次整除,再與10進行取模
int qianWei = i/10/10/10%10; //獲取千位:先與10進行三次整除,再與10進行取模
int wanWei = i/10/10/10/10%10;//獲取萬位:先與10進行四次整除,再與10進行取模
if(geWei==wanWei && shiWei==qianWei && geWei+shiWei+qianWei+wanWei==baiWei){
System.out.println(i);
}
}
}
}
12、
需求:請統計1-1000之間同時滿足如下條件的數據有多少個:
對3整除余2
對5整除余3
對7整除余2
分析:
1、定義一個變量統計個數 int num = 0;
2、for循環獲取1-1000的數據
3、每次循環去判斷該數據是否同時滿足條件,如果滿足,num+1
4、輸出num
public class ForTest8 {
public static void main(String[] args) {
int geShu = 0;
for(int i =1;i<=1000;i++){
if(i%3==2 && i%5==3 && i%7==2){
geShu = geShu +1;
}
}
System.out.println(geShu);
}
}
while循環
1、while循環
語句格式:
(1)簡化格式:
while(關系表達式){
循環體語句;
}
(2)完整格式:
初始化語句;
while(關系表達式){
循環體語句;
控制條件語句;
}
結論:for循環可以等價轉換為while循環(但不是所有while循環都可以轉換為for循環)
2、執行流程:
1、先執行初始化語句
2、判斷關系表達式的結果,
如果是true,進入while循環,執行循環體內容
如果是false,就不進入while循環,不執行循環體內容
3、如果進入循環體內容,執行循環體代碼和控制條件語句
4、直到關系表達式的結果為false,終止while循環
3、死循環介紹:
for(;;){}
while(true){}
4、 //需求:打印10遍HelloWorld
(1)利用for循環來實現
public class WhileDemo1 {
public static void main(String[] args) {
for(int i=1;i<=10;i++){
System.out.println("HelloWorld");
}
(2)利用while循環來實現
public class WhileDemo1 {
public static void main(String[] args) {
int i=1;
while (i<=10){
System.out.println("HelloWorld");
i++;
}
(3)死循環
public class WhileDemo1 {
public static void main(String[] args) {
int i1 = 0;
while (true){
System.out.println("這是死循環"+i1);
i1++;
}
5、while循環與for循環的區別:
(1)for循環結束后,在for循環中定義的初始化變量在外部無法使用;
while循環結束后,由於初始化值變量是在while循環外部定義的,所以在while循環外部可以訪問到
(2)for循環實現的是一個范圍內的循環;
while循環,不知道將來會循環多少次,但總會有個點去停止
例:每分鍾監控某網頁登錄用戶的情況,直到有非法用戶登錄,統計在此之前的次數
boolean flag = true;
while(flag){
if(非法用戶登錄){
flag = false;
}
}
6、 需求:我國最高山峰是珠穆朗瑪峰:8848m,我現在有一張足夠大的紙張,厚度為:0.01m。
請問,我折疊多少次,就可以保證厚度不低於珠穆朗瑪峰的高度?
public class WhileTest1 {
public static void main(String[] args) {
int height = 8848;
int count = 0; //定義變量表示疊的次數
double houDu = 0.01; //初始化語句
while (houDu<=8848){
houDu = houDu * 2;
count = count + 1;
System.out.println("此刻是第"+count+"次疊,此時厚度為:"+houDu);
}
System.out.println("折疊了"+count+"次,厚度為:"+houDu);
}
}
輸出結果為:
此刻是第1次疊,此時厚度為:0.02
此刻是第2次疊,此時厚度為:0.04
此刻是第3次疊,此時厚度為:0.08
此刻是第4次疊,此時厚度為:0.16
此刻是第5次疊,此時厚度為:0.32
此刻是第6次疊,此時厚度為:0.64
此刻是第7次疊,此時厚度為:1.28
此刻是第8次疊,此時厚度為:2.56
此刻是第9次疊,此時厚度為:5.12
此刻是第10次疊,此時厚度為:10.24
此刻是第11次疊,此時厚度為:20.48
此刻是第12次疊,此時厚度為:40.96
此刻是第13次疊,此時厚度為:81.92
此刻是第14次疊,此時厚度為:163.84
此刻是第15次疊,此時厚度為:327.68
此刻是第16次疊,此時厚度為:655.36
此刻是第17次疊,此時厚度為:1310.72
此刻是第18次疊,此時厚度為:2621.44
此刻是第19次疊,此時厚度為:5242.88
此刻是第20次疊,此時厚度為:10485.76
折疊了20次,厚度為:10485.76
Process finished with exit code 0
do...while循環
1、語句格式:
(1) 基本格式
do {
循環體語句;
}while(判斷條件語句);
(2) 擴展格式(開發中使用擴展格式)
初始化語句;
do {
循環體語句;
控制條件語句;
} while(判斷條件語句);
2、例:統計1-10之和
public class DoWhileDemo1 {
public static void main(String[] args) {
//統計1-10之和
int sum = 0;
int i = 1;
do {
sum = sum + i;
i++;
} while (i <= 10);
System.out.println("1-10之和為:" + sum);
}
}
3、debug查看運行過程:
(1)先在左邊將你要查看流程的代碼標紅
(2)右擊debug
(3)點一次》,執行一次步驟,觀察執行流程和變量值的變化
debug的好處:
讓我們更加清晰地明白程序是如何執行的,以及變量是如何變化的
4、 do...while和while區別
(1)while循環,執行的時候,會先進行一次判斷,如果是true才執行循環體
(2)do...while循環,執行的時候,會先執行一次循環體內容,然后再判斷是true還是false
*寫程序優先考慮for循環,再考慮while循環,最后考慮do…while循環*
例: public class DoWhileDemo3 {
public static void main(String[] args) {
int i = 0;
while (i>0){
System.out.println(i);
i--;
}
System.out.println("============do...while循環============");
do{
System.out.println(i);
i--;
}while (i>0);
}
}
輸出結果為:
============do...while循環============
0
Process finished with exit code 0