2016-03-23 27 views
2

2 ArrayList'im var, bu iki öğe arasındaki öğeleri belirli bir başlangıç ​​noktasından değiştirmem gerekiyor.ArrayLists öğesinin öğeleri arasında geçiş yapma

Benim geçerli kod şöyle görünür:

List<Character> seq1 = new ArrayList<Character>(someArrayList); 
    List<Character> seq2 = new ArrayList<Character>(someArrayList); 
    List<Character> tmp1 = new ArrayList<Character>(someArrayList); 
    List<Character> tmp2 = new ArrayList<Character>(someArrayList); 

     for(int i = start1; i <= seq1.size()-1; i++){ 
      tmp1.set(i,seq2.get(i)); 
     } 
     for(int i = start2; i <= seq2.size()-1; i++){ 
      tmp2.set(i,seq1.get(i)); 
     } 
     for(int i = start1; i <= seq1.size()-1; i++){ 
      tmp1.set(i,seq2.get(i)); 
     } 
     for(int i = start2; i <= seq2.size()-1; i++){ 
      tmp2.set(i,seq1.get(i)); 
     } 

start1 varsayarsak ve start2 her ikisi 4 Mesela

:

seq1: {A,A,A,A,B,B,B,B} 

seq2: {A,A,A,A,C,C,C,C} 

Nihai sonuç olmalıdır:

seq1:{A,A,A,A,C,C,C,C} 

seq2:{A,A,A,A,B,B,B,B} 

Ancak benimki hala orijinal değerleri ile geri dönüyor gibi görünüyor. Herhangi bir yardım büyük beğeni topluyor.

+0

yerine kod tarafından değiştirilmemiş orijinal listesini yazdırmak için çalışıyoruz görünüyor -> TMP1, seq2-> net yapılacaklar listesi tmp2' ve listeyi değiştirebilir misiniz? – soorapadman

cevap

1

Toplama durumunda, geçici bir değiştirme değişkenine veya başka bir şeye ihtiyacınız olmayacaktır. Sadece değerleri değiştirin.

for(int i = start1, j = start2; i < seq1.size() && j < seq2.size(); i++, j++){ 
    seq1.set(i, seq2.set(j, seq1.get(i))); 
} 
+0

Sanırım size 'doğru cevabı' vereceğim çünkü ne sorduğum için yanlış değilsiniz. For döngüsü ve önerilerinizi kullanarak, benim sorunumun, birim testin, bu referans dizini listelerini sq1 ve seq2, gerçek referanslar yerine YENİ olduğu için test etmemesiydi ve bu nedenle, birim test edilenler değildi. – Alkarin

0
List<Character> seq1 = new ArrayList<Character>(); 
    List<Character> seq2 = new ArrayList<Character>(); 
    seq1.add('A'); 
    seq1.add('B'); 
    seq1.add('B'); 

    seq2.add('A'); 
    seq2.add('C'); 
    seq2.add('C'); 
    List<Character> tmp1 = new ArrayList<Character>(seq1); 
    List<Character> tmp2 = new ArrayList<Character>(seq2); 

     int start1 = 1, start2 = 1; 
     for(int i = start1; i <= seq1.size()-1; i++){ 
      tmp1.set(i,seq2.get(i)); 
     } 
     for(int i = start2; i <= seq2.size()-1; i++){ 
      tmp2.set(i,seq1.get(i)); 
     } 

    System.out.println(tmp1.toString());  
} 

Çalışıyor.

Sorun şu ki, list tmp1 and tmp2 değiştiriyorsunuz. Böylece içerik geçici listelerinde değiştirilir.

Ve Size niye SEQ1 `tüm listeyi katmayan tekrarlamanın

İlgili konular