簡體   English   中英

Java數組問題

[英]Java Array Questions

因此,這只是一個基本問題。 我正在用Java處理數組,弄清楚我需要做些什么。 我決定試一下該陣列,看看如果我打印出該陣列會發生什么。 我對使用此代碼得到的結果感到非常困惑:

public class array_output{
    public static void main(String[] args){
       int[] anArray = new int[10];
       for(int p = 0; p < 10; p++){
           anArray[p] = p;
           //System.out.print(anArray[p] + " ");
           p++;
       }
       System.out.println (java.util.Arrays.toString(anArray));
    }
}

因此,最初的意圖是僅使數組為“ 0、2、4、6、8”。 我決定將System.out.print放在for循環之外並打印出來。 我得到的輸出是

[0, 0, 2, 0, 4, 0, 6, 0, 8, 0]

實際上,當我寫這篇文章時,我以為是在0到9之間的數字(例如0)處放置一個“ 0”,這是假的,如果該數字顯示在數組中,則不確定。

如果有人可以告訴我這是否正在發生,並且也許可以解釋如何在for循環外打印數組的值,我將不勝感激

您在每次迭代中將p遞增兩次:

for(int p = 0; p < 10; p++) { // here
    anArray[p] = p;
    p++; // and here
}

從循環體中刪除p++

如果希望數組包含0、2、4、6,...,則循環的主體應為

anArray[p] = p * 2;

即用其位置乘以2初始化數組的每個元素。

for循環的每次迭代中,您將p遞增兩次。
因此,僅分配數組的偶數索引(0,2,4,6,8)。

for(int p=0; p<10; p++){ // <-- first time here
    anArray[p]=p;
    //System.out.print(anArray[p] + " ");
    p++; // <-- second time here
}

如果刪除其中一個(刪除第二個p++更有意義),它將按預期工作。

順便說一句,如果目標是僅分配偶數到數組,則應分配2*p

for(int p=0; p<10; p++){
    anArray[p]=2*p;
}

您的問題是,使循環變量p兩次遞增:一次在常規for循環中,第二次在for循環結束時-因此,索引每兩步跳過一次,並且跳過的數組元素根本不被填充。

解決方案是正常迭代,但將index * 2放在當前數組位置:

public class array_output{
        public static void main(String []args){
        int[] anArray = new int[10];

        for(int p=0; p<10; p++){
            anArray[p]=p * 2;
        }

        System.out.println (java.util.Arrays.toString(anArray));
    }
}

我建議看一下Java語言規范

引用:

數組組件是未命名的變量,每當創建一個新的數組對象(第10節,第15.10節)時,它們都會創建並初始化為默認值(第4.12.5節)。 當不再引用數組時,數組組件實際上將不復存在。

在您的情況下,您使用的是int並且默認情況下將其初始化為0。

這就是您得到的原因:[0、0、2、0、4、0、6、0、8、0]因為“缺失”值實際上只是從其默認值不變。 2 4 6 8是因為您將p遞增了兩次,但是我不確定這是設計使然還是錯誤,因為您的最初問題似乎表明前者。

如果只希望包含以下內容:0 2 4 6 8您可以使用以下代碼:

public class array_output{
    public static void main(String[] args){
       int[] anArray = new int[5];
       for(int p = 0; p < 5; p++){
           anArray[p] = p * 2;
       }
       System.out.println (java.util.Arrays.toString(anArray));
    }
}

如果只希望包含5個元素,則沒有理由將數組初始化為10號。

嗨,當您聲明如下數組時,無需擔心:

int[] anArray = new int[10];

從0到9的所有索引都將其初始化為“ 0”;

當您插入值時,它將插入:

anArray[0]=0;
anArray[2]=2;
anArray[4]=4;
anArray[6]=6;
anArray[8]=8;

並且由於所有其他索引值已經為“ 0”。 因此,如果您打印數組,它將打印為:

[0, 0, 2, 0, 4, 0, 6, 0, 8, 0]

如果要打印數組,只需運行for循環並打印為:

for(int i=0;i<10;i++)
  System.out.println(anArray[i]);

默認情況下,int數據類型初始化為值0。由於您將p遞增兩次(在for循環中一次,在循環體中一次),所以只有具有偶數索引的元素才能更改其值。

因此,在第一次迭代中,您將獲得anArray [0] =0。然后您將p遞增兩次,因此在第二次迭代中,p等於2,然后執行anArray [2] = 2,而跳過anArray [1]。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM