5 Stimmen

Java-Array, Element zum nächsten leeren Index hinzufügen

In Java, gibt es einen Weg, einen Wert nicht an einem bestimmten Index, sondern am nächsten nicht deklarierten Index hinzuzufügen? Angenommen:

int[] negativeArray = new int[21];
int[] positiveArray = new int[21];

Es gibt zwei Arrays für zwei verschiedene Arten von ints, zum Beispiel negativ und positiv. Ich durchlaufe dies in einer Schleife, und ich möchte, dass es ähnlich wie ein Stapel funktioniert (ich weiß nicht viel über Stapel, aber meines Wissens nach durchläuft man nicht den Index, sondern legt Elemente darauf ab/nimmt sie weg), sodass, wenn es sich um eine negative Zahl handelt, die Zahl an der nächsten nicht deklarierten Indexposition im negativen Array platziert wird.

Ich habe eine Möglichkeit gedacht, dies mit etwas zusätzlichem Code zu tun. Ich würde alle Werte im Array auf 0 setzen. Beim Überprüfen, ob die Variable negativ oder positiv ist, würde ich durch das Array bis zum nächsten Wert, der 0 ist, durchlaufen. Sobald ich ihn finde, weiß ich, auf welchem Index ich mich befinde. Dies erfordert jedoch etwas Aufwand, gibt es einfachere Möglichkeiten, dies zu tun?


Bearbeitung: Einige Kommentare geben verschiedene Möglichkeiten an, dies ohne Verwendung eines einfachen Arrays zu tun. Mir wurde dies zugewiesen, und ich muss ein Array verwenden, um dafür Anerkennung zu erhalten...

8voto

ARRG Punkte 2436

Wenn Sie das Array tatsächlich als Stapel verwenden (und daher nur Elemente oben auf dem Stapel hinzufügen oder entfernen), könnten Sie in einer anderen Variablen den nächsten freien Index im Array halten.

int[] array = new int[21];
int nextIndex = 0;

public void push(int e) {
    array[nextIndex] = e;
    ++nextIndex;
}

public int pop() {
    --nextIndex;
    return array[nextIndex];
}

Wenn Entfernungen überall auftreten können, sehe ich keine bessere Lösung, als das Array zu durchlaufen, um einen freien Platz zu finden.

3voto

Guillaume Polet Punkte 46837

Deshalb wurden List erstellt. Verwenden Sie einfach etwas Ähnliches wie dies:

List negativeIntegers = new ArrayList(21);
...
negativeIntegers.add(-127);

1voto

assylias Punkte 308529

Wenn Sie ein Array mit den positiven Werten und eines mit den negativen Werten erstellen möchten, können Sie dies mit dem von Ihnen vorgeschlagenen Algorithmus tun:

public static void main(String[] args) throws Exception {
    int[] negativeArray = new int[3];
    int[] positiveArray = new int[3];

    int[] test = new int[] {1, -1, 2, -2, 3, -3};

    int posIndex = 0;
    int negIndex = 0;

    for (int i = 0; i < test.length; i++) {
        if (test[i] > 0) {
            positiveArray[posIndex++] = test[i];
        } else if (test[i] < 0) {
            negativeArray[negIndex++] = test[i];
        }
    }

    System.out.println(Arrays.toString(test)); //[1, -1, 2, -2, 3, -3]
    System.out.println(Arrays.toString(positiveArray)); //[1, 2, 3]
    System.out.println(Arrays.toString(negativeArray)); //[-1, -2, -3]
}

0voto

user3001 Punkte 3359

Schau dir http://docs.oracle.com/javase/6/docs/api/java/util/Stack.html an

Es macht im Grunde dasselbe wie die Lösung von ARRG, aber mit weniger Code:

Stack negativ = new Stack();
Stack positiv = new Stack();

public void meineZahlEinfügen(int zahl) {
  // 0 als "positiv" betrachtend
  if (zahl >= 0) {
    positiv.push(zahl); //Auto-Boxing
    return;
  }
  negativ.push(zahl);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X