這篇文章為你搞懂5個問題
- while 迴圈如何使用
- do-while 迴圈的使用
- for 迴圈的使用
- break、continue 的使用
- 迴圈結構的巢狀使用
生活中有很多事情需要我們重複的去做,比如圍著操場跑10圈,比如寫了個爬蟲需要爬取20個頁面,這些都是迴圈。
while 迴圈
while 迴圈是一個先判斷後執行的迴圈,由迴圈條件和迴圈操作組成。
語法:
while(迴圈條件){
迴圈操作
}
複製程式碼
敲一敲:
public class DemoWhile {
public static void main(String[] args) {
int i=0;//定義一個變數
while(i<10) {//迴圈條件
System.out.println(i);
i++;//更新條件
}
}
}
複製程式碼
迴圈條件為 true 時執行迴圈操作,為 false 時不執行
上面的程式碼中的迴圈條件是i小於10,由於i最開始時為0所以比較結果為true,進入迴圈,在迴圈操作中修改變數的值,使條件不斷更新,防止死迴圈,當i的值為10的時,迴圈條件為 false,這時候迴圈就結束了。
敲一敲:
/**
* 計算 1-100的和
* @author Jack
*
*/
public class DemoSum {
public static void main(String[] args) {
int sum=0;//定義儲存和的變數
int i=1;//要更新的數字
while(i<=100) {//迴圈1-100
sum+=i;//累加
i++;//更新數字
}
System.out.println("1-100的和:"+sum);
}
}
複製程式碼
敲一敲:
import java.util.Scanner;
/**
* 輸入y打招呼,輸入n結束
* @author Jack
*
*/
public class DemoWhileInput {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("輸入y打招呼,輸入n結束");
char choose=input.next().charAt(0);
while('y'==choose) {//char型別的比較使用 ==
System.out.println("hello");
System.out.println("輸入y打招呼,輸入n結束");
choose=input.next().charAt(0);
}
System.out.println("迴圈結束");
}
}
複製程式碼
do-while迴圈
do-while迴圈執行的特點是先執行後判斷,先執行 do 程式碼塊中的程式碼,迴圈條件為 true時繼續執行 do 程式碼塊,為 false 時結束迴圈。
語法:
do{
迴圈操作
}while(迴圈條件);
複製程式碼
敲一敲:
public class DemoDoWhileSum {
public static void main(String[] args) {
int sum=0;//用於儲存求和後的值
int i=1;
do {
sum+=i;
i++;
} while (i<=100);
System.out.println("1-100的和為:"+sum);
}
}
複製程式碼
上面 while 迴圈中的打招呼的程式碼改用 do-while 更合適,下面的程式碼會先打招呼,然後詢問是否繼續,輸入y將繼續
敲一敲:
import java.util.Scanner;
public class DemoDoWhile {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
char choose=' ';
do {
System.out.println("hello");
System.out.println("輸入y繼續打招呼,輸入n結束");
choose=input.next().charAt(0);
}while(choose=='y');
System.out.println("迴圈結束");
}
}
複製程式碼
for 迴圈
對於固定次數的迴圈,使用 for 將更加簡潔
語法:
for(引數初始化;條件判斷;更新迴圈變數){
迴圈操作
}
複製程式碼
1.先執行引數初始化
2.然後進行條件判斷,如果為 true 執行第3步,為 false 將結束迴圈
3.執行迴圈操作
4.更新迴圈變數,然後再次進入第2步進行條件判斷
敲一敲:
public class DemoFor {
public static void main(String[] args) {
//列印1-100的數
for(int i=1;i<=100;i++) {
System.out.println(i);
}
}
}
複製程式碼
引數初始化和更新變數可以同時操作多個變數,像 i++,j--
這樣用 ,
隔開
import java.util.Scanner;
public class DemoAddTable {
public static void main(String[] args) {
System.out.println("請輸入一個值:");
Scanner input=new Scanner(System.in);
int val=input.nextInt();
for(int i=0,j=val;i<=val;i++,j--) {
System.out.println(i+" + "+j+"="+(i+j));
}
}
}
複製程式碼
在 for 迴圈中兩個
;
不能省略
如果省略迴圈條件將造成死迴圈
引數初始化可以省略,但要放在迴圈的上面,保證變數的可用
更新迴圈變數可以省略,但要放在迴圈裡面,保證變數的更新不會導致死迴圈
break 和 continue
break:改變程式控制流程,用於 do-while、while、for、switch,跳出結構執行結構後面的語句。
敲一敲:
import java.util.Scanner;
public class DemoBreak {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
while(true) {
System.out.println("是否繼續遊戲?輸入任意繼續,輸入no結束:");
String goon=input.next();
if ("no".equals(goon)) {//字串之間的比較使用 equals
break;
}
}
System.out.println("結束");
}
}
複製程式碼
這裡的迴圈條件為 true,也就是一個死迴圈,但在迴圈過程中如果輸入 no 將執行 break ,那麼這個迴圈也就結束了。
continue:只能用在迴圈中,跳過迴圈體中剩餘的語句而執行下一次迴圈。
敲一敲:
import java.util.Scanner;
/**
* 統計年齡大於16的人數
* @author Jack
*
*/
public class DemoContinue {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("請輸入學員數量:");
int pnum=input.nextInt();//學員總人數
int num=0;//儲存年齡大於16的人數
for(int i=1;i<=pnum;i++) {
System.out.println("請輸入第 "+i+" 位學員的年齡:");
int age=input.nextInt();
if (age<17) {
continue;//跳過後面程式碼,繼續下一次迴圈
}
num++;
}
System.out.println("年齡大於16的人數:"+num);
}
}
複製程式碼
迴圈巢狀
巢狀迴圈的特點:外層迴圈執行一次,內層迴圈執行一遍,各種迴圈可以任意巢狀,下面使用 for 迴圈演示列印矩形。 語法:
while(……){
for(……;……;……){
}
}
do{
while(……){
}
}while(……);
for(……;……;……){
do{
}while(……);
}
……
複製程式碼
敲一敲:
import java.util.Scanner;
public class DemoRectangle {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("輸入要列印的行數:");
int line=input.nextInt();//行數
System.out.println("輸入要列印的列數:");
int column=input.nextInt();
//外層迴圈控制行數,內層迴圈控制列數
for (int i = 1; i <= line; i++) {
for (int j = 1; j <= column; j++) {
System.out.print("* ");//不換行列印
}
//列印完所有的列後換行
System.out.println();
}
}
}
複製程式碼
敲一敲:
/**
* 列印一個三角形
* @author Jack
*
*/
public class DemoDelta {
public static void main(String[] args) {
for(int i=1;i<=5;i++) {//外層迴圈控制行
for (int j = 1; j <= i; j++) {//內層迴圈控制列的條件
System.out.print("* ");
}
System.out.println();
}
}
}
複製程式碼
列印一個5行的三角形,外層的迴圈控制行數,所以條件是
i<=5
。列和行的條件是什麼?第一行1個*,第二行2個*,第三行3個*,所以條件為j<=i
。
試一試
1.使用巢狀迴圈列印倒三角形
2.使用巢狀迴圈列印99乘法表
1*1=1
1*2=2 2*2=4
……
1*8=8 2*8=16 ……
1*9=9 2*9=18 …… 9*9=81
複製程式碼
搜尋關注公眾號「享智同行」,第一時間獲取技術乾貨,關注後回覆009 獲取本次練習答案!