淺談for循環,for循環習題講解
文章多看幾遍吧~相信你一定會收穫不少哇~
什麼是循環?
我認爲循環就是把一個步驟一直重複執行的操作。如果沒有終止條件,那麼這一步驟就會一直執行下去,直到地老天昏。書本上對循環的定義是:用來控制語句塊重複執行的一種結構。在編程中一共有三種類型的循環語句:while循環、do-while循環和for循環。那麼今天我就先給大家介紹循環結構中的一種語句---for循環。
for循環的語法:
for(1循環的初始化 ; 2循環的繼續條件 ; 4循環的步長 ){
3循環體
}
循環過程:1-2-3-4-2 -3-4-2- 3-4-2- 3-4-2 直到循環的終止條件爲止
注意:for 循環語句從關鍵字 for 開始,然後是用雙括號括住的循環控制結構體。這個結構體包括循環的初始化 ,循環的繼續條
件和循環的步長。控制結構體後緊跟着花括號括起來的循環體。循環的初始化 ,循環的繼續條件和循環的步長都要用分號分隔。
一般在已知循環次數的條件下使用for循環最佳。
1、
代碼展示:
class Test02{
public static void main(String[] args){
for(int line=1;line<=4;line++){
for(int i=1;i<=8;i++){
System.out.print("*");
}
System.out.println();
}
}
}
這是最基礎的題啦~它使用了兩個for循環語句,就是for循環的嵌套語句啦~上述語句的循環過程爲:i爲1時,因爲i<8,所以
打印一個*,隨後 i+1=2 ,因爲2<8,所以繼續打印一個*,隨後 i+1=3 ,因爲3<8,所以繼續打印一個*,一直這樣循環直到
i= 9時,這for循環就結束。而第一個for循環的意思是打印四行 *,輸出即爲結果。
2、
代碼展示:
class Test02{
public static void main(String[] args){
for(int line=1;line<=7;line++){
for(int i=1;i<=line;i++){
System.out.print("*");
}
System.out.println();
}
}
}
“for(int line=1;line<=7;line++)”這一行就不用解釋了吧~主要解釋第二個for循環 循環控制體裏面的內容。第二個for循環循環
控制體裏的語句主要是打印每行的 * 的個數,第一行一個 * ,第二行2 個 * ;第三行 3 個 * ;可以發現 每行的 星的個數 =
行數,那麼
int i =1; 就是 * 個數的初始化,每一行的 * 都是由 1 個開始增加的,
i<=line;因爲星的個數 = 行數,所以i<=line;
i++;就是 打印的 * 的個數逐次增加,直到 * 的個數= 行數。
3、
for(int i=1;i<=11;i++){
for(int j=1;j<=i&&j<=12-i;j++){
System.out.print("*");
}
System.out.println();
}
接下來的代碼展示,我就只展示 for循環語句的部分啦~主要解釋第二個for循環
int j=1;打印 * 的個數,每行 * 的個數都是有 1 開始增加的
j<=i&&j<=12-i; 建立 * 的個數 與行數之間的關係,即 行數 + * 的個數 = 12 且 每行的 * 數 < 行數 ,所以對 j 的定義就如此
j++ :打印的 * 的個數逐次增加,直到 * 的個數= 12 - 行數。
4、
代碼展示;
for(int i=1;i<=11;i++){
for(int k=1;k<=Math.abs(i-6);k++){
System.out.print(" ");
}
for(int j=1;j<=i&&j<=12-i;j++){
System.out.print("*");
}
System.out.println();
}
這個圖案相對於第三個圖案來說只是每行前面都加了一定數目的空格數,其餘代碼都不變,所以現在我們主要講加空格的
那個for循環。空格數先減後增,與數學中的絕對值函數類似,可以發現 第6 行以前 空格數 由5到0依次遞減,後5行的 空
格數 由1到5依次遞增, 建立它與行數的關係,每行的空格數 = |6 - 行數|,就有上面的代碼啦~
5、
代碼展示:
for(int i=1;i<=11;i++){
for(int k=1;k<=Math.abs(i-6);k++){
System.out.print(" ");
}
for(int j=1;j<=i&&j<=12-i;j++){
System.out.print("* ");
}
System.out.println();
}
這段代碼幾乎與上一段相同,唯一的變化就是 把 輸出 * 變成了 * + 空格
6、
上述圖形對應的數字圖形如上所示,我們可以輕易的發現,凡是數字圖形上1 的位置和 行數 對應的位置上就是這個 圖形 *
的位置,其他位置都是空格 ,所以該圖形的基礎代碼和第五題代碼一樣,在它的基礎上加了一個 if 語句 如果
(j==1 || j==i || j+i==12)
就輸出 * ,否則 輸出 空格。其中 j==1 j==i 對應的就是 數字圖形上1 的位置和 行數 對應的位置
代碼展示:
for(int i=1;i<=11;i++){
for(int k=1;k<=Math.abs(i-6);k++){
System.out.print(" ");
}
for(int j=1;j<=i&&j<=12-i;j++){
if(j==1||j==i||j+i==12){
System.out.print("* ");
}else{
System.out.print(" ");
}
}
System.out.println();
}
習題展示:
顯示金字塔,編寫程序,提示用戶輸入一個 1 到 15 之間的數字,然後顯示一個金字塔形狀如圖所示:
import java.util.Scanner;
public class Demo03_14{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("Enter an number:");
int num = scanner.nextInt();
for(int i = 1;i<=num;i++){ // 輸出行數
for(int k =1;k<=num-i;k++){ //輸出空格
System.out.print(" ");
}
for(int x =-(i-1);x<=i-1;x++){ //輸出數字
System.out.printf("%3d",Math.abs(x)+1);
}
System.out.println();
}
}
}
每行數字的規律 :
以第三行爲例,3 2 1 2 1 一般先減後增的數字排列,我們的第一反應應該就是 數學中的絕對值函數
那麼對應函數的 值域爲 [ 1,3 ] y 即 3 2 1 2 1 -------對應第 3 行
定義域爲 [ - 2, 2 ] x 即 -2 -1 0 1 2 ,解題思想就是 需要 建立 行數 i 與 x 之間的關係 把輸出數字 用 x 表示
出來 , 可以發現 x 最小是 負的 行數 - 1 ,最大是 行數 - 1 ,那麼輸出數字就是 x 的絕對值 + 1 ;
空格的規律:
空格數 依次遞減 以第三行爲例, 空格數 爲 輸出總行數 - 該行序列數
使用嵌套的循環語句,用四個獨立的程序打印下面的圖案
import java.util.Scanner;
public class Demo03_15{
public static void main(String[] args){
for(int i = 1;i<=6;i++){
for(int x=1;x<=i;x++){
System.out.print(x+" ");
}
System.out.println();
}
}
}
數字規律:
每行都是 由 1 遞增到 該行序列數 所以建立它與行數之間的關係即 x<= i
注意輸出的是 數字 + 一個空格
for(int i = 1;i<=6;i++){
for(int x=1;x<=7-i;x++){
System.out.print(x+" ");
}
System.out.println();
}
數字規律:
以第一行爲例, 1 2 3 4 5 6 ,可以發現 它與行數 i 的 關係就是 輸出數字 x = 7- i ,第一行 輸出 1~6,第二行輸出 1~5,
以此類推。
for(int i = 1;i<=6;i++){ //輸出行數
for(int k=1;k<=6-i;k++){ // 輸出空格數
System.out.print(" ");
}
for(int x=i;x>=1;x--){ //輸出數字
System.out.print(x+" ");
}
System.out.println();
}
與前兩個圖案不同的是 這個圖案 加入了 空格
空格規律:第一行 5 個 空格 ,第二行 4 個 ,第三行 3 個 ,依次遞減,那麼建立 他與 行數 i 的關係 就是 k=6- i
數字規律:以第三行爲例 3 2 1 即 由行序數依次遞減爲 1 ;那麼建立他與行數 之間的關係就是 輸出數字數 等於行序數
,輸出數字最小 爲1 且 依次遞減 即 int x=i;x>=1;x--
for(int i = 1;i<=6;i++){ //輸出行數
for(int k=1;k<=i-1;k++){ //輸出 空格數
System.out.print(" ");
}
for(int x=1;x<=7-i;x++){ //輸出 數字
System.out.print(x+" ");
}
System.out.println();
}
空格規律: 由 第一行 0 個開始 逐行遞增,建立他與 行數之間的關係 就是 k=i-1
數字規律:與第二個圖案規律一樣 ,參考即可
編寫一個嵌套的for循環,打印下面輸出
public class Demo03_16{
public static void main(String[] args){
for(int i =1;i<=8;i++){ //輸出行數
for(int j =1;j<=8-i;j++){ //輸出空格數
System.out.print(" "); //每次輸出4個空格
}
for(int x=-(i)+1;x<=i-1;x++ ){ //輸出數字
System.out.printf("%4d",(int)Math.pow(2,Math.abs(x)));
}
System.out.println();
}
}
}
數字規律: 以第 3 行爲例 1 2 4 2 1, 可以發現每個數都是 2 的次冪
即 2^0 2^1 2^2 2^1 2^0 總結次冪的規律
即 0 1 2 1 0 ,數字先增後減 ,聯想數學中的 絕對值函數
那麼對應函數的 值域爲 [ 0,2 ] y 即 0 1 2 1 0 -------對應第 3 行
定義域爲 [ - 2, 2 ] x 即 -2 -1 0 1 2 ,解題思想就是 需要 建立 行數 i 與 x 之間的關係 把輸出數字 用
x 表示出來 , 可以發現 x 最小是 負的 行數 - 1 ,最大是 行數 - 1 ,那麼輸出數字就是 2 ^ x 次冪,注意輸出結果要
轉換爲 int 型,不然輸出的數字就是小數啦~
空格規律: 該圖案一共 8 行 ,那麼建立 空格數與行數之間的關係 即可 即 j = 8 - i ,重點在 後面的輸出語句上 我特意在上
面的代碼中標註出來啦,就是 每次都輸出 4 個空格 ,爲什麼呢?原因是 這個圖案 輸出的最大數字爲128 ,它對應占 3 個
空格 爲了產生 上述整齊的金字塔模樣, 特意讓輸出數保留 4 位數 最後強轉爲整型的 ,那麼這4 個空格數 就對應 這4 位
保留數,這樣一來每次輸出的都是 4 個單位長度的 ,才能產生上述金字塔模樣。
注意:最後輸出數字的語句爲 printf 而不是 print
小知識普及:print println 與 printf 的用法
Print :可以返回一個值,只能有一個參數
Println :可以打印出字符串,和變量 ,println與print唯一的區別是println換行輸出。
Printf : 只可以打印出格式化的字符串,可以輸出字符串類型的變量,不可以輸出整形變量和整形
for循環規律總結
無論是數字還是行數,都一定要想辦法找規律並且建立它與行數之間的關係。特別注意,
發現先減後增或者先增後減的空格數或者行數一定要聯想到絕對值函數,然後用橫座標 x
與 行數之間的關係來表示空格數或者行數即可!
害~這是我的理解啦~你們看着用吧~實在 不明白 for循環 ()雙括號裏面東西是怎麼來的 可以多看幾遍我的文章喔~