2017-10-15 223 views
1

有關通過int []迭代的問題。 假設我們創建INT []:迭代int數組

int[] list = new int[5]; 

後,我們要填充它。我知道這是可能的下一段代碼來做到這一點:

for(int x = 0; x < list.length; x++){ 
     list[x] = x; 
} 

但我真的想知道下一個:

for(int x : list){ 
     list[x] = x; 
} 

,它甚至沒有,如果我把x++;在工作, for循環體x每次迭代都是0。我不問沒有它,我仍然可以使用第一個for循環,但我想知道和使用更多的「新」 - 「乾淨」 - 「更好」的方式,如果它是很好說,所以,迭代雖然[]。 預先感謝您。

+0

在你的第一個循環中,x是一個索引,在你的第二個循環中,x是int對象本身,因此list [x]將不起作用 –

回答

2

總有:

int[] list = IntStream.range(0, 5).toArray(); 
+0

這真的很快很乾淨 - 謝謝。 –

+1

@LevanVoronin請注意'rangeClosed(0,5)'將爲6個數字創建數組:0,1,2,3,4,5。如果你想限制爲5個數字,使用'range(0,5)'。 – Pshemo

+0

或'Arrays.setAll(list,i - > i);' – shmosel

-1

使用增強的for循環,不能修改數組。 x代表每個元素值,而不是索引。因此list[x] = x可能無意義。如果您需要修改元素,請使用帶有索引變量的經典循環。

+0

「您無法使用增強型for循環修改數組」不正確。我們仍然可以修改數組,但不能通過'list [x] = x'。如果我們聲明自己的迭代計數器,我們仍然可以使用'list [iteration ++] = newValue;'即使在enhanced-for循環中。 – Pshemo

+0

@Pshemo事實上,您可以在增強for循環中修改**數組**,這與我的觀點完全無關。這個問題也很明顯。 – shmosel

+0

英語不是我的母語,所以我可能會誤解你,但是你的意思是,如果執行是*,而在增強型for循環中,那麼它不是*使用*增強型for循環?國際海事組織,這是混亂(或至少不明顯),所以你可以澄清你的答案的一部分? (順便說一句,不是我的反對票)。 – Pshemo

0

在循環的第二個版本中x不是索引,而是存儲的值之一。該值從增強的for循環,因爲

  1. 你沒有可用
  2. 的指數,而你讀修改列表項的增強的for循環不許你不能更改。雖然這個限制主要是刪除它的問題,它也適用於原始類型或不可變類型,例如String或任何基本包裝器。
+0

Enhanced for循環不禁止您執行任何操作。 – shmosel

+0

列表 l = ...;/*初始化項目*/ for(MyClass c:1){l.remove(c)} //會對你大喊 是的,它不是for循環本身禁止你收藏。它在實踐中真的有所作爲嗎? –

+0

當然是的;不是所有的數據結構,甚至所有的列表都有這種限制。它不適用於陣列,它不能在結構上進行修改。 – shmosel