關於java for和while的問題 高手近來解答

這是一個用for 跟while兩層巢狀迴圈來顯示九九乘法表的程式

但是 倒數第10行的 第二層迴圈開始 我就看不太懂了

請大大幫我解釋一下

public class Ch4_5 {

// 主程式

public static void main(String[] args) {

int i, j ; // 變數宣告

// 顯示標題列

System.out.print(" ");

for ( i = 1; i <= 9; i++ )

System.out.print(i + " ");

System.out.println( );

// 巢狀迴圈

for ( i = 1; i <= 9 ; i++ ) {

// 顯示欄標題

System.out.print(i + " ");

j = 1;

while ( j <= 9 ) { // 第二層迴圈

System.out.print(i+"*"+j+"="+(i*j)+" ");

if ( ( i * j ) < 10 && j != 1 )

System.out.print(" "); // 調整位置

j++;

}

System.out.println();

}

}

}

已更新項目:

小朵大大

那請問一下 蝦咪是調整位置動作????

調整乘法式哪裡的位置? 是乘法式跟乘法式之間的間距嗎?

2 個已更新項目:

第一個迴圈的空白不打

1*j 系列的式子 會跑上去第一行

第二個迴圈空白不打

全部式子變成一行

3 個已更新項目:

了改了 謝謝 ^^

1 個解答

評分
  • 8 年前
    最佳解答

    我直接解釋第2個for迴圈...

    首先i=1進入for迴圈,並且執行顯示1加上一格空白,而後j等於1進入while迴圈,執行i+"*"+j+"="+(i*j)+" ",也就是1*1=1(因為此時i和j都是1),然後判斷i*j有沒有小於10以及j有沒有不等於1,因為此時不符合條件(j=1),所以不執行下行調整動作(也就是再加上一格空格,這邊調整只是為了讓99乘法表美行對齊,看起來較為美觀,如果只是要執行顯示99乘法表,其實是可以省略的),接著執行j++,也就是j=j+1=1+1=2,然後回到while迴圈最上層(while ( j <= 9 )),判斷此時j有沒有小於等於9,因為符合條件所以繼續執行迴圈,只是此時是用i還是等於1而j等於2來執行,所以顯示1*2=2加上一格空格,然後一樣判斷i*j有沒有小於10以及j有沒有不等於1,此時都符合條件,執行下行的調整位置動作,再加上一格空格,而後j再次累加1變成3,又回到while ( j <= 9 )...一步一步做到j超過9之後,跳出while迴圈,執行下行System.out.println(),也就是換行動作...到這邊,程式執行結果如下:

    1 1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9

    接著跳回for ( i = 1; i <= 9 ; i++ ),i累加1變成2,並且同時判斷i有無超過9,因為此時i沒有超過所以繼續執行下行,顯示2加上一格空格,再來j又變成1進入while迴圈,接著以i=2而j=1執行顯示i+"*"+j+"="+(i*j)+" ",也就是2*1=2再加上一格空格,而後判斷i*j有沒有小於10以及j有沒有不等於1,因為不符合條件而不繼續執行下行調整位置的動作,再然後j累加1變成2,回到while ( j <= 9 ),並判斷j有無超過9,沒有超過所以繼續執行顯示i+"*"+j+"="+(i*j)+" ",此時i=2,j=2,所以顯示2*2=4再加上一格空格,這次下行if ( ( i * j ) < 10 && j != 1 )判斷條件符合,所以執行調整位置的動作,加上一格空格,之後j累加1變成3....一樣執行到j超過9就跳出while迴圈,再執行換行,到這邊執行結果如下:

    1 1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9

    2 2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18

    以此類推應該了解了吧...不懂的話再問吧...

    2013-02-24 09:51:01 補充:

    是的,調整位置只是讓乘法和乘法式子之間的間隔多一格而已,因為後面的答案會有兩格,而不像1乘以多少都是個位數,所以為了美觀,有些人會利用調整位置將第一行(也就是1乘以多少等於多少那行)每個式子間多增加一格,才能和第2行之後的每一列對齊(也就是和2乘以多少等於多少那行之後對齊)

    2013-02-24 11:30:45 補充:

    其實你只要把

    if ( ( i * j ) < 10 && j != 1 )

    System.out.print(" "); // 調整位置

    這兩行刪掉執行看看,再對照沒有刪除(也就是原本的程式碼)執行的結果,應該就可以看的出來嚕~

    2013-02-24 12:15:35 補充:

    不知為何知識+的空格都會被去掉,所以要看執行結果,最好還是在JAVA裡面執行看看喔!

    2013-02-24 16:40:11 補充:

    ...你說的不是空白吧?是換行....你說的是應該是System.out.println( );

    只有這條不打,才會造成你說的下一行跑到上一行,以及全部變成一列的情形,System.out.println( );在javs中的意思是:顯示括號內的內容並且換下一行,而在這邊括號內並沒有任何內容,所以無顯示並且換行!

    而所謂的空一格是指System.out.print(" ")或是System.out.print(i + " ")的「" "」,才是空格喔!!這樣懂嗎?

    2013-02-24 16:41:10 補充:

    抱歉打錯字...是在java中...

    參考資料: 我本人
還有問題?馬上發問,尋求解答。