2012-04-05 6 views
3

G'dayUmschreiben dieses Arbeits Java Array es einfacher zu machen, besser oder effizienter zu gestalten, ohne Arraylist

Ich habe eine Java-Zuordnung für einen Einführungskurs orientierte Programmierung zu widersprechen. Ich habe die Aufgabe beendet, und das Programm funktioniert wie erwartet (brauchte eine Weile, um dies zu erreichen!) Und ich bekomme die gewünschte Ausgabe. Nur mit einer meiner Methoden habe ich 2 FOR-Schleifen mit einer IF-Anweisung verwendet, und ich frage mich, ob es eine andere Möglichkeit gibt, die einfacher, besser oder effizienter ist? Aber ich darf keine ArrayList verwenden. Ich verstehe, dass die ArrayList einfacher, besser und effizienter ist, aber ohne die Möglichkeit, die ArrayList zu verwenden, ist es möglich, meinen Code besser zu machen und trotzdem das gleiche Ergebnis zu erzielen?

Grundsätzlich ersuche ich den Benutzer, eine ID-Nummer eines Eigenschaftenobjekts einzugeben, dann diese ID mit der Arrayindexposition abzugleichen und dieses Objekt von einem Array (propertiesForSale) in ein anderes Array (propertiesSold) zu kopieren 1 bis meinen Zähler (numPropertiesSold) vor dem Löschen und Verdichten (mein Lehrer sagte Umbildung) die die erste (propertiesForSale) Array und Dekrementieren meinen anderen Zähler (numPropertiesForSale) um 1.

My-Code wird wie folgt ..

public void sellProperty(int inID) 
    { 
     for (int index = 0; index < numPropertiesForSale; index++) { 

      if (propertiesForSale[index].getId() == inID) { 

       propertiesSold[numPropertiesSold]= propertiesForSale[index]; 
       numPropertiesSold++; 

       for (int i = index; i < numPropertiesForSale; i++) { 

       propertiesForSale[i] = propertiesForSale[i + 1]; 
       } 

       numPropertiesForSale--; 
      } 
     } 
    } 

Wenn es einen einfacheren, besseren oder effizienteren Weg gibt, ohne ein ArrayL zu verwenden ist, bin ich nur neugierig zu sehen, ob es da ist und wie es gemacht würde.

Vielen Dank für Ihre Zeit, Geduld und Input (falls vorhanden).

+0

'if' nicht Schleife. –

+0

Ah ja in der Tat, danke für das Hinzeigen. – bigdal

+0

Haben Sie auch Karten verwendet? Das wäre mit einem K-> V-Modell viel schöner als eine lineare Array-Struktur sowie effizienter – maasg

Antwort

3

Wenn Sie nicht ArrayList verwenden dürfen, sieht das für mich so gut wie möglich aus.

Obwohl eher als eine Schleife mit dem propertiesForSale Array nach unten einem verschieben Sie in mit System.arraycopy() statt Ihrer eigenen Schleife aussehen wollen könnten, da arraycopy() eine native Methode ist.

+0

Danke, ich werde die System.arrayCopy auf der API recherchieren und damit herumspielen. – bigdal

1

Sie können Ihre eigene benutzerdefinierte verknüpfte Liste verwenden, die aus Knoten besteht. Auf diese Weise müssen Sie die Einträge des Arrays nicht verschieben, wenn Sie eine Immobilie verkaufen. Sie entfernen nur den Knoten aus der Liste und aktualisieren die Zeiger.

+1

Eine benutzerdefinierte verknüpfte Liste aus Knoten?Ich habe keine Ahnung, was das ist, aber ich werde es googlen und sehen, ob ich es ausarbeiten und damit herumspielen kann. Vielen Dank. – bigdal

+0

@bigdal Google verknüpfte Liste – Adrian

1

Sie suchen nach inID in propertiesForSale. Wenn Sie eine Übereinstimmung finden, übertragen Sie dieses Objekt zum nächsten Index in propertiesSold und dann Sie compact das Array durch die Übertragung aller Datensätze darüber auf einen Index niedriger. Das letzte Element wird nur dort belassen, aber bei der nächsten Suche wird nicht darauf zugegriffen, weil Sie die Anzahl verringern.

Eine weitere Option besteht darin, das Array nicht zu komprimieren, sondern es stattdessen auf null zu setzen. Sie müssen natürlich die maximale Grenze in der äußeren for-Schleife anpassen und einen Nicht-Null-Check hinzufügen, aber die innere for-Schleife ist weg.

Ist es besser? Könnte sein. Was du hast, ist ziemlich gut.

+0

Danke für die Antwort. Ich versuche die richtige Terminologie zu verstehen und zu verwenden. Also verdichte ich das Array technisch? Verschieben Sie das Objekt nicht zwischen den beiden Arrays? Meinst du, dass ich das Array komprimiere, indem ich den Array-Index lösche und so den Rest der Array-Indizes verdichte? Ich weiß jetzt, ich hätte sagen sollen, dass ich das Objekt auf das andere Array kopiere, da ich es nicht wirklich bewege. – bigdal

+0

Technisch gesehen komprimieren Sie nicht, da sich die Array-Größe nicht ändert. Ja, Sie kopieren die Referenz von einem Array zum anderen. Aber danach bewegst du die Elemente runter. Ich habe vorgeschlagen, dass Sie das vermeiden können, auf Kosten von zusätzlichen Nullkontrollen. –

1

Testen Sie Ihren Code, indem Sie das Feld propertiesForSale vollständig ausfüllen, bevor Sie eine Immobilie verkaufen. Das heißt, was passiert wenn numPropertiesForSale == propertiesForSale.length wenn Sie versuchen, ein Element zu entfernen?

+0

Bevor ich diesen Code fertiggestellt habe, glaube ich, dass ich eine Ausnahme mit dem von Ihnen vorgeschlagenen Szenario hatte. Ich brauchte eine Weile, um zu erkennen, dass das passierte, denn ich konnte nicht herausfinden, warum es nicht funktionieren würde! Ich habe eine Variable MAX_PROPERTIES, die auf 10 gesetzt ist und die Gesamteigenschaften nur 5 (diese werden alle vom Lehrer festgelegt). Ich denke, das war der Punkt, an dem wir ArrayList nicht benutzen, also verstehen wir, was hinter den Kulissen so vor sich ging. Bitte korrigieren Sie mich, wenn ich falsch liege! – bigdal

Verwandte Themen