2015-04-03 135 views
0

如何切換數組列表中的每兩項?編譯錯誤,賦值表達式

例如: 「喜」, 「怎麼做」, 「是」, 「你」 變成了:

「怎麼做」, 「喜」, 「你」, 「是」

這是我的錯誤(在實踐中):

編譯器找到了一個它不期待的數據類型。有時,當你弄錯=用於==比較值

發生此錯誤時

意想不到類型
需要:可變
實測值:值
list.get(ⅰ)= list.get第(i + 1);

意想不到類型
需要:可變
實測值:值
list.get第(i + 1)=溫度;

這是我有:

public void switchPairs(ArrayList<String> list){ 
     String temp = ""; 
     for(int i = 0; i<= list.size(); i+2){ 
         temp = list.get(i); 
         list.get(i) = list.get(i+1); 
         list.get(i+1) = temp; 
     } 
    } 
+0

你認爲'list.get(i)= ...'應該做什麼?你爲什麼這麼認爲? – 2015-04-03 22:22:57

回答

2

您正在嘗試使用get方法作爲變量的迴歸。與數組訪問表達式不同, arr[i] = value,這是合法的,方法調用的結果不能用這種方式。您必須改用set method

temp = list.get(i); 
list.set(i, list.get(i + 1)); 
list.set(i + 1, temp); 

這將修復編譯器錯誤,但運行這將保證IndexOutOfBoundsException

如果列表大小均勻,然後將list.get(i)i達到list.size()拋出IndexOutOfBoundsException。請記住,有效索引是從0size() - 1

如果列表大小爲奇數,則list.get(i + 1)將拋出IndexOutOfBoundsException

你必須改變你的for循環條件停止之前ii + 1出界。 (增量需要+=有此效果。)

for(int i = 0; i < list.size() - 1; i+=2){ 

這將在奇數大小不變的名單留下的最後一個項目。

0

因爲每種方法都會返回一個value而不是variable

並且賦值運算符的左操作數必須是是變量,否則會發生編譯時錯誤。

你可以認爲這樣的方式: 如果我們可以通過修改一個變量通過它的吸氣劑,是封裝使得廢話,由於通常是私人屬性的吸氣劑。

總而言之,在這種情況下(和許多其他情況),您應該使用setter來實現您的黃金。像這樣:

list.set(i, "something you want");