[英]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.