2016-11-02 7 views
0

Ich habe ein 2D-ArrayVergleichen von zwei 1-Säule 2d Arrays

0 1 0 
    0 * 0 
    0 * 0  
    0 2 0 
    0 * 0  

Dass ich

dieses
0 * 0  
0 * 0  
0 * 0  
0 1 0  
0 2 0  

Dadurch dieses

Dot[][] tempDot = dotArray; 
    ArrayList<Descriptor> movedList = new ArrayList<Descriptor>(); 
    for(int j=0; j<this.getHeight(); j++){ 
for (int i=this.getHeight()-1; i>0; i--){ 
    if(dotArray[i][col] == null){ 
     dotArray[i][col] = dotArray[i-1][col]; 
     dotArray[i-1][col] = null; 
    } 
} 
     } 

Jetzt werden geändert Ich versuche Finde heraus, wie man die zweite Spalte in der ersten mit der zweiten Spalte in der zweiten vergleicht. Ich muss ein "Descriptor" -Objekt zurückgeben, das den ursprünglichen Ort irgendein nicht-Null enthält, das nach unten bewegt wurde. Ich habe versucht, Verschachtelung für Schleifen zu machen, um den ersten Wert in jeder Schleife zu überprüfen und dann den ersten Wert in der zweiten Schleife zu finden, aber das hat nicht funktioniert. Jede Hilfe wäre großartig!

+0

Willkommen bei StackOverflow! Bitte fügen Sie ein Tag hinzu, das beschreibt, in welcher Sprache oder Umgebung es sich befindet. –

Antwort

0

Wenn Descriptor wie folgt definiert ist,

private class Descriptor { 
    Descriptor(int from, int to, Dot[] dots) { 
     this.from = from; 
     this.to = to; 
     this.dots = dots; 
    } 

    public int from; 
    public int to; 
    public Dot[] dots; 
} 

können Sie auf diese Weise tun.

// Store original location(index) of each row. 
    Map<Dot[], Integer> originLocMap = new HashMap<Dot[], Integer>(); 
    for (int i = 0; i < tempDot.length; i++) { 
     originLocMap.put(tempDot[i], i); 
    } 

    // Sort rows by second column (dot[*][1]) 
    for (int i = tempDot.length - 1; i > 0; i--) { 
     if (tempDot[i][1] != null) { 
      continue; 
     } 

     for (int j = i - 1; j >= 0; j--) { 
      if (tempDot[j][1] != null) { 
       Dot[] temp = tempDot[i]; 
       tempDot[i] = tempDot[j]; 
       tempDot[j] = temp; 
       break; 
      } 
     } 
    } 

    // Collect location change data 
    ArrayList<Descriptor> movedList = new ArrayList<Descriptor>(); 
    for (int i = tempDot.length - 1; i >= 0; i--) { 
     if (tempDot[i][1] == null) { 
      break; 
     } 

     Dot[] dots = tempDot[i]; 
     int from = originLocMap.get(dots); 
     Descriptor descriptor = new Descriptor(from, i, dots); 
     movedList.add(descriptor); 
    } 


    Iterator<Descriptor> it = movedList.iterator(); 
    while (it.hasNext()) { 
     Descriptor d = it.next(); 
     System.out.println(d.from + " ==> " + d.to); 
    }