簡體   English   中英

增強的For循環Java

[英]Enhanced For loop Java

我正在嘗試為以下整數數組編寫一個for循環。 數組的大小為10。我編寫了兩個循環。 第一個循環將增加該值,第二個循環將打印結果,例如Element 1為10,Element 2為20。但是我一直都得到0。 我給了以前的代碼,一切都很好。 出於測試的原因,我想實現增強的for循環。 但是我堅持2個問題,如何增加值以及如何定義arraylength。 這是我的代碼。

public static void main(String[] args) {

    int[] myIntArray = new int[10];

    for(Integer num: myIntArray){
        myIntArray[num]=num*10;
    }

    for(int num:myIntArray){
        System.out.println("Element " + num + ", value is " + myIntArray[num]);

    }
}

以前的代碼

 int[] myIntArray =new int[10];

    for(int i =0; i<myIntArray.length;i++){
        myIntArray[i]=i*10;
    }
    for(int i=0;i<myIntArray.length;i++){
        System.out.println("Element " + i + ", value is " + myIntArray[i]);
    }

首先,您必須用索引填充數組:

    Arrays.setAll(myIntArray, i -> i);

之后,在輸出期間,您不應嘗試將值作為myIntArray[num] ,因為使用增強的for循環您已經具有一個值,但是沒有其索引。 所以結果代碼應該是這樣的:

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

    Arrays.setAll(myIntArray, i -> i);

    for(Integer num: myIntArray){
        myIntArray[num]=num*10;
    }

    for(int num : myIntArray){
        System.out.println("Element " + num/10 + ", value is " + num);

    }
}

盡管我同意以前的評論,但增強循環不是與數組索引一起使用的正確選擇。

它們都返回零,因為在構造數組時,數組中每個int的默認值為零。 然后將其乘以十。 仍將返回零。 您需要在使用for循環之前填充數組。

編輯:

看完您的編輯后,建議不要為此使用增強的for循環。 在正確的情況下使用增強的for循環是一個很好的工具。 它並不比常規的for循環自動更好,並且根據情況決定使用哪個循環。

int[] myIntArray =new int[10]; 您實例化了一個由10個元素組成的數組,所有這些元素均為0。

這就是為什么在這里:

for(Integer num: myIntArray){
    myIntArray[num]=num*10;
}

您的操作更像是0 * 10,即0。

for(int i=0; i<myIntArray.length;i++){
    myIntArray[i]=i*10;
}

並顯示:

for(int num:myIntArray) {
    System.out.println("Element " + num + ", value is " + num);
}

這很簡單。 0 * 10 = 0;)

您的int數組未初始化,並且int原語的默認值為0。如果要使用基於索引的值對其進行預設,則需要使用索引在數組上進行迭代或在循環中添加一個。

int index=0;
for(Integer num: myIntArray){
    myIntArray[index]=(++index)*10;

}

要么

for(int index=0;index<myIntArray.length;i++){
    myIntArray[i]=(i+1)*10;
}

對於每個對象,如果被循環的對象是數組,則將隱藏index變量。 如果要循環的對象是可迭代的類型,則for每個循環的實現將隱藏迭代器。 因此,如果它是一個數組,並且循環內需要一個索引,則最好使用帶有數組索引的循環。

因此,對於每個這樣寫的:

for(Integer num: myIntArray){
  myIntArray[num]=num*10;
}

與以下情況類似,在您的情況下:

for(int i =0; i<myIntArray.length;i++){
        myIntArray[i]=myIntArray[i]*10;
} 

並且不要使用數組中的值在每個索引的側面進行索引,因為如果值恰好大於等於數組長度,則它將超出范圍而拋出索引。 這里不是,因為數組中的值是int類型,並且它們都被初始化為0,小於數組長度10。

for(int num:myIntArray){
    System.out.println("Element " + num + ", value is " + myIntArray[num]);
}

暫無
暫無

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

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