iT邦幫忙

1

初級Java 陣列迴圈解讀

初學Java,還在釐清觀念,
想問int[] arr=new int[10];這行已經宣告陣列了。
下面兩個迴圈是一樣的內容。

為什麼第一個for迴圈印出來是
arr 初始值:0 0 0 0 0 0 0 0 0 0
而不是直接輸出
arr 設定值:0 1 2 3 4 5 6 7 8 9

可以請版友解釋一下嗎?


public class TestArray {
public static void main(String[] args) {

    int[] arr=new int[10];
    
    System.out.print("arr 初始值:");
    for(int i=0;i<arr.length;i++){
        System.out.print(arr[i]+"  ");
        arr[i]=i;
    }
    System.out.print("\narr 設定值:");
    for(int i=0;i<arr.length;i++)
        System.out.print(arr[i]+"  ");
    System.out.println();
    }
}     

輸出
arr 初始值:0 0 0 0 0 0 0 0 0 0
arr 設定值:0 1 2 3 4 5 6 7 8 9

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
4
海綿寶寶
iT邦大神 1 級 ‧ 2020-05-26 07:39:10
最佳解答

跟陣列沒關係,跟迴圈也沒關係
因為你先印出值 才 設定 arr[i]

for(int i=0;i<arr.length;i++){
        System.out.print(arr[i]+"  ");
        arr[i]=i;
    }

改成

for(int i=0;i<arr.length;i++){
        arr[i]=i;
        System.out.print(arr[i]+"  ");
    }

即可

為什麼每次貼程式碼
都只有部份程式碼會用</>框起來?

看更多先前的回應...收起先前的回應...

我很好奇的是她到底看哪本書來學.

通靈亡 iT邦高手 1 級 ‧ 2020-05-26 08:33:41 檢舉

幫海綿大大補充

如果你直接貼程式碼,IT幫幫忙的Markdown編輯器會把Tab縮排的部分視為程式碼
導致你看到程式碼呈現不一的狀況

所以貼程式碼最好的方法,是先按下</>後,會出現兩行三個```
在第一行設定你要貼的語言後
接著把程式碼貼在兩行三個```中間。

https://ithelp.ithome.com.tw/upload/images/20200526/20120331rRa9WLFoM8.png

IT幫幫忙的Markdown編輯器會把Tab縮排的部分視為程式碼

原來如此,今天又學到新知識了

我是已經習慣直接打,不去按</>了。

Java SE 8 技術手冊,
ISBN:9863471712,作者:林信良
一級屠豬士

這一本喔~

這本也太舊了吧。
學技術量不要拿舊書學。

我去看了一下Java SE 6 技術手冊
這段程式碼是在教(未設定前)int 的初始值(0)

有點像宮大師的絕活「老猿掛印」
關隘不是在「掛」,而是在「回頭」

浩瀚星空

老師說這個版本比較穩定+Oracle還沒縮權限,所以上課用這個版,現在是更新到14了吧~ (倒~

海綿寶寶

我不知道老猿掛印的寓意,總之是初始值是0~ (畫重點

fillano iT邦超人 1 級 ‧ 2020-05-26 11:55:51 檢舉

我記得良葛格這本最近會出新版吧?

那本不是給初學者學的.是用來查的.難怪你什麼都不會,卻又問一些問題以外的.書好不好,是一回事,但是你還不適合用這本來學.
你應該先看書籍前面會介紹書的定位,與適合的讀者.

去買別本書啦.

通靈亡 iT邦高手 1 級 ‧ 2020-05-27 10:53:29 檢舉

1.Java程式設計導論(第十版)
https://www.books.com.tw/products/0010671212?loc=P_0003_010

2.JAVA程式設計藝術(第十版)(國際版)
https://www.books.com.tw/products/0010749106?loc=P_0003_014

我之前去書局比較過這兩本書的Java
雖然版本偏舊 (跟樓主一樣是用SE8),但是範例和練習題品質算不錯

Java程式設計導論

  1. 程式碼範例跟練習題的數量和廣度還不錯,深度算中間
  2. 註解和用字遣詞較第二本簡潔,比較容易理解
  3. 中文書的章節沒有第二本這麼完整,缺少的章節範例和練習我是看原文書的資料學,原文書寫得很完整

JAVA程式設計藝術

  1. 程式碼範例和練習題數量和廣度普通,深度較深
  2. 註解和用字遣詞較第一本囉嗦
  3. 中文書的章節比第二本完整,原文書的排版我覺得第一本比較好

以樓主完全初學者的程度,我會推薦樓主可以拿第一本打底
挫折感也比較不會這麼重
比較新的內容可以直接看網路資料就好

良葛格 iT邦新手 2 級 ‧ 2020-06-01 18:01:47 檢舉

可是…《Java SE 8 技術手冊》裏沒這個範例喔!…XD

這個範例應該是從我開放的《Java SE 6 技術手冊》來的:
https://github.com/JustinSDK/JavaSE6Tutorial/blob/master/docs/CH05.md#%E7%AF%84%E4%BE%8B-52--arraydemojava

哇!有神快拜
/images/emoticon/emoticon32.gif

良葛格
抱歉,是 Java SE 6 技術手冊才對
已更正
/images/emoticon/emoticon25.gif

沒想到作者出現了! (拜

謝謝 通靈亡 很受用~ 立即去找書~

0
鬼王很慘
iT邦新手 2 級 ‧ 2020-05-26 09:23:57

遇到bug惹,重複回答...

0
鬼王很慘
iT邦新手 2 級 ‧ 2020-05-26 09:23:57

學習程式很重要的一點是掌握它的運行順序。您的程式碼有兩部分的先後次序需要釐清。

一、通常運行順序

一般而言,程式是由上往下一行一行Statement執行的,所以如下程式碼

int i = 1;
System.out.print(i);
i = 2;

運行步驟為:

  1. 給i賦值為1
  2. 輸出i的值
  3. 重新給i賦值為2

因此輸出的結果會是1

二、for循環的運行順序

for (int i = 0; i < 3; i++) {
    System.out.print(i);
}

運行步驟為:

  1. 判斷 i < 3
  2. 輸出i的值
  3. i++

如果兩者結合起來

int j = 2;
for (int i = 0; i < 3; i++) {
    System.out.print(j);
    j = i;
}

實際流程為:

  1. 聲明變數j並賦值為2
  2. 聲明變數i並賦值為0
  3. 判斷變數i是否小於3
  4. 因為0小於3為真,輸出變數j的值2
  5. 將變數j重新賦值為i的值0
  6. 變數i增加1,此時i等於1
  7. 判斷變數i是否小於3
  8. 因為1小於3為真,輸出變數j的值0
  9. 將變數j重新賦值為i的值1
  10. 變數i增加1,此時i等於2
  11. ...

輸出的結果會是:201

以後若遇到自己無法理解的情況,最簡單的方法就是每行輸出,觀察它的變化。

看更多先前的回應...收起先前的回應...

所以如下程式碼
int i = 1;
System.out.print(i);
int i = 2;

運行步驟為
給i賦值為1
輸出i的值
給i賦值為2
因此輸出的結果會是1 (不是2嗎?

通靈亡 iT邦高手 1 級 ‧ 2020-05-26 10:44:10 檢舉

我反問你為什麼會覺得是 2 ?
這邊又沒有非同步、執行緒的問題 (你應該也聽不懂)

就像在你ithelp的帳號改暱稱之前,
ithelp有辦法事先通靈你要改成什麼暱稱嗎?

vivianhsu0924

因此輸出的結果會是1 (不是2嗎?

int i = 1; // 給 i 賦值 為 1
System.out.print(i); // 印出 i 這時 i = 1;
i = 2; // 重新給 i 賦值為 2

如果改成這樣

int i = 1; // 給 i 賦值 為 1
i = 2; // 重新給 i 賦值為 2
System.out.print(i); // 印出 i 這時 i = 2;

i 就是 2
這也是大大回答得重點

學習程式很重要的一點是掌握它的運行順序

我有補充了,你再看一下

ted59438
我想我可能會錯意,以為是重新賦值後再輸出~

i=2 //重新賦值
前面沒有用final 定義不能更動,
那之後如果再次輸出就變2。

鬼王很慘

好的,謝謝鬼王

我要發表回答

立即登入回答