2017-04-23 42 views
-5

請在downvoting之前閱讀註釋。Java不可修改的數組編程測試

以下是給定的代碼;目前輸出[3,2][3,2,4]。您必須修改restore()方法,以便輸出將是[1,2][1,2]

import java.util.ArrayList; 

public class Solution { 
    private ArrayList<Integer> data; 

    public Solution(ArrayList<Integer> data) { 
     this.data = data; 
    } 

    public ArrayList<Integer> restore() { 
     return this.data; 
    } 

    public static void main(String[] args) { 
     ArrayList<Integer> list = new ArrayList<Integer>(); 
     list.add(1); 
     list.add(2); 
     Solution snap = new Solution(list); 
     list.set(0, 3); 
     list = snap.restore(); 
     System.out.println(list); // Should output [1, 2] 
     list.add(4); 
     list = snap.restore(); 
     System.out.println(list); // Should output [1, 2] 
    } 
} 

應該怎麼辦?

注:測試已完成,因此您可以回答問題,謝謝!

+0

至少你應該表現出你的方法。這個社區不是爲了解決你不能解決的問題,而是爲了解決你的問題。並沒有提供您的解決方案或至少您的方法。 – sascha10000

+0

不知道什麼問題在這裏..'list.set(0,3);'設置索引0 == 3你正在改變一個值從1到3所以期望輸出3,2是正確的 –

+0

@Luminous_Dev是的,所以你必須修改restore()方法,以便輸出爲1,2。 – Amit1011

回答

1

你的問題是一種非混凝土。 但我認爲還原應該恢復初始輸入。

因此:

ArrayList<Integer> init; 
public Solution(ArrayList<Integer> data) { 
    this.data = data; 
    this.init = new ArrayList<Integer>(data); 
}  

public ArrayList<Integer> restore() { 
    ArrayList<Integer> cpy = new ArrayList<Integer>(this.init); 
    return cpy; 
} 
+0

它仍然會輸出1,2和1,2,4 – Amit1011

+0

這將起作用。 – sascha10000

+0

仍然沒有工作.. – Amit1011

1

這裏需要做出一些改變的代碼。問題是Java操縱Objectsreference,並且您執行了一些manipulation operations,因爲reference而更改了原始數據。

你的代碼改成這樣:

public Main(ArrayList<Integer> data) 
{ 
    ArrayList<Integer> newList = new ArrayList<Integer>();  

    for(Integer in:data) 
     newList.add(in); 

    this.data = newList; 
} 

public ArrayList<Integer> restore() 
{ 
    ArrayList<Integer> newList = new ArrayList<Integer>(); 

    for(Integer in:data) 
     newList.add(in); 

    return newList; //returns a reference of a list which has nothing to do with the original list. 
} 
+0

完美。謝謝 – Amit1011