2014-10-14 17 views
8

Jetzt arbeite ich mit dem rekursiven Zurückverfolgen, meine Aufgabe ist es, den längsten Pfad im Labyrinth zu finden, die Masse wird als das Feld dargestellt, das mit den Koordinaten bedeckt ist, und die Koordinaten der Wände sind wund in der Datei. Ich habe einen Parser gemacht, um die Eingabedatei zu analysieren und die Wände zu bauen, aber ich habe diese Koordinaten auch im Array eines Objekttyps Coordinate gespeichert, um zu prüfen, ob es möglich ist, das nächste Stück der "Schlange" auf die zu verschieben nächstes Feld, dann habe ich diese Methode erstellt, jetzt habe ich verstanden, dass ich eine Methode brauche, um die letzte Koordinate aus dem Array zu entfernen, wenn ich Backtracking verwenden werde, wie kann ich es tun? Das Ziel ist nicht Array-Listen zu verwenden oder verknüpft Listet nur Arrays auf! Vielen Dank!Wie lösche ich das letzte Element aus einem Array?

public class Coordinate { 
int xCoord; 
int yCoord; 

Coordinate(int x,int y) { 
    this.xCoord=x; 
    this.yCoord=y; 
} 

public int getX() { 
    return this.xCoord; 
} 

public int getY() { 
    return this.yCoord; 
} 
public String toString() { 
    return this.xCoord + "," + this.yCoord; 

} 

} 

Und

public class Row { 
static final int MAX_NUMBER_OF_COORD=1000; 

Coordinate[] coordArray; 
int numberOfElements; 


Row(){ 
    coordArray = new Coordinate[MAX_NUMBER_OF_COORD]; 
    numberOfElements=0; 

    } 


void add(Coordinate toAdd) { 
    coordArray[numberOfElements]=toAdd; 
    numberOfElements +=1; 
} 
boolean ifPossible(Coordinate c1){ 
    for(int i=0;i<numberOfElements;i++){ 

     if(coordArray[i].xCoord==c1.xCoord && coordArray[i].yCoord==c1.yCoord){ 
       return false; 
      } 
     } 


    return true; 
} 

} 
+1

Ist 'arrays' zwingend benutzen? Sie könnten mit Objektvariation wie 'ArrayList' gehen oder andere hilfreiche Methoden geben. –

+0

Ja, es ist obligatorisch, ich weiß, es ist dumm, sie zu benutzen, aber es ist obligatorisch! –

Antwort

41

Da Java-Arrays sind nicht-veränderbare, werden Sie alles in eine neue, kürzere Array kopieren.

Arrays.copyOf(original, original.length-1) 
-1
Arrays.asList(ARRAY_NAME).remove(ARRAY_NAME.length) 
+0

Sind Sie sicher? 'Arrays.asList (?)' Gibt eine schreibgeschützte 'Liste' zurück. –

+0

@beckyang'Arrays.asList' gibt keine schreibgeschützte Liste zurück, nur eine, die eine feste Größe hat (es ist eine Sicht auf das Array, das an sie übergeben wurde). Aber Sie haben Recht, dass dies nicht funktioniert (weil 'remove (int)' nicht unterstützt wird), und selbst wenn 'remove (int)' unterstützt worden wäre, hätte es eine 'ArrayIndexOutOfBoundsException' ausgelöst. –

2

Ich weiß, es ist ein sehr alter Thread. Trotzdem hat die genehmigte Antwort für mich nicht funktioniert. Und so habe ich es gelöst.

eine Methode wie folgt erstellen:

String lines[] = {"One", "Two", "Three", "Four", "Five"}; 
lines = sliceArray(lines, 0, 3); 

Dies führt zu:

String[] sliceArray(String[] arrayToSlice, int startIndex, int endIndex) throws ArrayIndexOutOfBoundsException { 
    if (startIndex < 0) 
     throw new ArrayIndexOutOfBoundsException("Wrong startIndex = " + startIndex); 
    if (endIndex >= arrayToSlice.length) 
     throw new ArrayIndexOutOfBoundsException("Wrong endIndex = " + endIndex); 

    if (startIndex > endIndex) { // Then swap them! 
     int x = startIndex; 
     startIndex = endIndex; 
     endIndex = x; 
    } 

    ArrayList<String> newArr = new ArrayList<>(); 
    Collections.addAll(newArr, arrayToSlice); 
    for (int i = 0; i < arrayToSlice.length; i++) { 
     if (!(i >= startIndex && i <= endIndex)) // If not with in the start & end indices, remove the index 
      newArr.remove(i); 
    } 
    return newArr.toArray(new String[newArr.size()]); 
} 

Dann es so genannt

"One", "Two", "Three", "Four" 

Jetzt habe ich in welch auch immer das Array in Scheiben schneiden kann wie ich will!

lines = sliceArray(lines, 2, 3); 

Dies führt zu:

"Three", "Four" 
+1

Wenn Sie eine Start- und Endposition angeben müssen, sollten Sie 'Arrays.copyOfRange' verwenden – puhlen

Verwandte Themen