2017-04-23 13 views
-5

downvotingの前にもコメントを読んでください。Java変更不可能なarraylistプログラミングテスト

以下は指定されたコードです。現在、[3,2][3,2,4]を出力しています。出力が[1,2][1,2]になるように、restore()メソッドを変更する必要があります。

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はい、出力が1,2になるようにrestore()メソッドを変更する必要があります。 – 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

あなたがここにコード内のいくつかの変更を加える必要があります。問題はJavaObjectsreferenceを操作し、referenceのために元のデータを変更するmanipulation operationsの一部を実行したことです。

これにあなたのコードを変更

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

関連する問題