2017-03-21 24 views
-1
import java.util.*; 
public class RotateList { 

    public static void main(String[] args) 
    { 
     List<List<Integer>> copies = new ArrayList<>(); 
     List<Integer> list = new ArrayList<>(Arrays.asList(1,2,3)); 
     int size = list.size(); 
     Set<List<Integer>> set = new HashSet<>(); 
     while(size > 0) 
     { 
      copies.add(list); 
      size--; 
     } 
     size = list.size(); 
     System.out.println("Copies Before:"); 
     System.out.println(copies); 

     for(int i = 0; i < copies.size();i++) 
     { 

      Collections.rotate(copies.get(i), i+1); 

     } 
     System.out.println("Copies after:"); 
     System.out.println(copies); 
     } 

}リストがJavaで回転しないのはなぜですか?

出力である:

コピーする前に:[[1、2、3]、[1、2、3]、[1、2、3] コピー後:[[1,2,3]、[1,2,3]、[1,2,3]]

私はこれでどこが間違っているのかわかりません。

+1

すべての要素は、彼らが回転したりしていない場合はどのようにあなたは知っているだろう、同じですか?総回転は '1 + 2 + 3 = 6'であり、すべての要素を元の場所に戻します。 –

答えて

2

問題は同じリストを3回追加することです。それらのいずれかを回転させると、それらのすべてを回転させます。

3つの別個のリストを作成する必要があります。

List<List<Integer>> copies = new ArrayList<>(); 

for(int i = 0; i < 3; i++) { 
    copies.add(new ArrayList<>(Arrays.asList(1,2,3))); 
} 

System.out.println("Copies Before:"); 
System.out.println(copies); 

for (int i = 0; i < copies.size(); i++) { 
    Collections.rotate(copies.get(i), i + 1); 
} 

System.out.println("Copies after:"); 
System.out.println(copies); 

出力:あなた `copies`で

Copies Before: 
[[1, 2, 3], [1, 2, 3], [1, 2, 3]] 
Copies after: 
[[3, 1, 2], [2, 3, 1], [1, 2, 3]] 
関連する問題