java迴圈問題(for迴圈)?

抱歉這個程式很長,但我要問的是下面的i、j是代表什麼,該怎麼解釋?

import java.io.*;

public class test02

{

public static void main(String args[])throws IOException

{

int i,j;

int no[]=new int[50];//no[50]放數字的陣列

int count=0;//紀錄共幾個數字

int tmp;//位置對調時所需的暫存參數

///////////////讀檔///////////////

String str;//字串

String[] ScoreArray;

FileReader read=new FileReader("random.txt");

BufferedReader buffread=new BufferedReader(read);

System.out.println("=======================");

while((str=buffread.readLine())!=null)

{

ScoreArray=str.split(" ");

for(i=0; i<ScoreArray.length; i++)//

{

count++;

no[count]=Integer.parseInt(ScoreArray[i]);

System.out.print(no[count]+"\t");

}

System.out.print("\n");

}

read.close();//關檔

System.out.printf("========讀檔完成======\n\n");

///////////////排序///////////////

System.out.printf("========排序======\n\n");

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

{

for(j=i+1; j<=count; j++)

{

if(no[i]>no[j])

{

tmp=no[j];

no[j]=no[i];

no[i]=tmp;

}

}

}

System.out.printf("========排序完成======\n\n");

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

System.out.printf(no[i]+" ");

}

}

1 個解答

評分
  • 3 年前
    最佳解答

    下面的i跟j就是整數變數

    int i,j;//設i跟j這2個變數,並定義他們為整數integer

    程式語言初學者可能看到雙重for迴圈會看不懂他是怎麼執行的?

    簡單來說每當內層for迴圈執行完畢,

    外層for迴圈才會在執行一次,

    假設我寫

    int i, j;

    內層迴圈寫for(i=1; i<=5; i=i+1)

    外層迴圈寫for(j=1; j<=5; j=j+1)

    那麼外層迴圈執行第一次,裡面內層迴圈執行五次,

    外層迴圈在執行第二次,裡面內層迴圈執行五次。

    也就是說當外層迴圈for(j=1; j<=5; j=j+1)執行完五次結束時,

    裡面的內層迴圈for(i=1; i<=5; i=i+1)已經執行完5×5=25次了。

    同樣的道理三層迴圈、四層迴圈也是一樣,

    由裡面迴圈開始執行,

    每當裡面迴圈達到終止條件跑完後,

    外層迴圈才再執行一次。

    很類似時鐘的構造,

    每當秒針轉完60格,

    分針才轉1格;

    秒針再轉完一次60格,

    分針再轉1格。

    類似這種感覺,所以當分針轉2格時,秒針已經轉了60×2=120格了。

    .

    //test02.java

    import java.io.*;

    public class test02

    {

    public static void main(String args[])throws IOException

    {

    //這邊因為我個人不習慣看簡化寫法的關係,我把"i++"用"i=i+1"取代,"j++"用"j=j+1"取代。

    int i, j;//宣告變數i跟j為整數integer

    int no[]=new int[50];//no[50]放數字的陣列, 宣告一個只能放整數的, 長度為50的陣列, 陣列名字為no[]

    int count=0;//紀錄共幾個數字

    int tmp;//位置對調時所需的暫存參數

    ///////////////讀檔///////////////

    String str;//字串, 宣告變數str為字串

    String[] ScoreArray;//宣告一個字串陣列

    FileReader read=new FileReader("random.txt");

    BufferedReader buffread=new BufferedReader(read);

    System.out.println("=======================");

    //a!=1意思是a≠a,a==1意思是a=1,a=1意思是指定1這個數值給變數a儲存。

    //印象中之前在某facebook專頁看過一個笑話,一個男生約女生出去看電影,女生回:「!好」

    //男生說標點符號怎麼打錯了?好可愛。

    //時間到了女方沒來赴約。在c語言, java語言裡。"!="是"不=" "≠"的意思

    //所以女方意思是說:「不好」。

    while((str=buffread.readLine())!=null)//如果符合「str字串不為空白(null)」這個條件,則執行while迴圈。

    {

    //如果str==null, str字串為空白,不符合條件,跳過whlie迴圈,執行下一行程式。

    ScoreArray=str.split(" ");

    for(i=0; i<ScoreArray.length; i=i+1)//計數迴圈,for迴圈(初始值; 結束條件; 變數更新[條件敘述])

    {

    //ScoreArray.length指得是我們宣告的ScoreArray陣列之長度

    //i初始值設為0,i<ScoreArray陣列的長度,每執行一次迴圈,程式都會檢查i是否大於等於ScoreArray.length

    //如果i沒有大於等於ScoreArray.length,符合迴圈條件(true),則再執行一次變數更新,

    //直到i大於等於ScoreArray.length不符合結束條件,結束迴圈。執行下一行程式

    count=count+1;

    no[count]=Integer.parseInt(ScoreArray[i]);

    System.out.print(no[count]+"\t");

    }

    System.out.print("\n");//換行,此處也可以使用System.out.println()代替換行功能。

    }

    read.close();//關檔

    System.out.printf("========讀檔完成======\n\n");

    ///////////////排序///////////////

    System.out.printf("========排序======\n\n");

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

    {

    for(j=i+1; j<=count; j=j+1)

    {

    //當內層的for迴圈從j=i+1的初值執行到j>count為止結束,此時外層的for迴圈再跑一次i=i+1的值,

    //接著,內層的for迴圈再從j=i+1的初值執行到j>count為止結束,此時外層的for迴圈再跑一次i=i+1的值,

    //直到外迴圈的i值>count為止。

    //j=i+1, 此處把j的初始值設定為i+1,代表j永遠比i還要大。

    //j<=count, 內層for迴圈結束條件為j大於count,

    //j=j+1, for迴圈每執行一次,j就+1 一次。

    if(no[i]>no[j])

    {

    //如果發現no[0]>no[1](隨便舉例,因為j=j+1,所以j永遠比i多1,比i還大。)

    //也就是說如果發現陣列裡前方位址的數值比後方位址的數值大,

    //則執行以下的三元換位法,把大的數值指定給後方位址的陣列。

    //小的數值指定給前方位址的陣列。

    //如此一來no[]陣列從no[0] no[1] no[2], 開始排起,會由小排到大。

    //此排序法稱作氣泡排序法,二個數字互相比較,大的往後排,小的往前排,

    //一直比較直到每個數字都比完為止,此時排序結束。

    tmp=no[j];

    no[j]=no[i];

    no[i]=tmp;

    }

    }

    }

    System.out.printf("========排序完成======\n\n");

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

    {

    //for迴圈,初始值i設為1,迴圈每執行一次,i就+1一次,直到i>count為止。

    System.out.printf(no[i]+" ");

    }

    }

    }

    這邊附上java程式碼註解化彩色照片,

    您可以用電腦打開來放大慢慢觀看慢慢思考,

    有不懂的地方再問。

    .

    1

    https://www.facebook.com/photo.php?fbid=1971436541...

    .

    2

    https://www.facebook.com/photo.php?fbid=1971437274...

    .

    3

    https://www.facebook.com/photo.php?fbid=1971438007...

    .

    4

    https://www.facebook.com/photo.php?fbid=1971438507...

    .

    5

    https://www.facebook.com/photo.php?fbid=1971439341...

    .

還有問題?馬上發問,尋求解答。