Freie Stelle eines Arrays

Ap0

Mitglied
Hallo zusammen,

ich habe leider ein Problem mit einer Java-Aufgabe, das Thema ist (einfache) Objektorientierung und speziell Arrays.
Und zwar soll ich zunächst eine Klasse DynamicArray erstellen, die als einziges Attribut einen Integer-Array besitzt. Dieser Array soll dann mit Hilfe von einem (von drei verschiedenen) Konstruktoren mit einer bestimmten Länge initialisiert werden; so weit so gut.
Jetzt soll ich eine Objektmethode implementieren, die an der ersten freien Stelle des Arrays einen übergebenen Wert einfügt.
Hier beginnt mein Problem bereits bei der Aufgabenstellung? Was genau ist eine "freie Stelle"? Anfangs bin ich davon ausgegangen, dass damit ein Feld gemeint ist, in dem eine "0" steht. Da die Null ja aber auch sehr wohl ein Wert sein kann, ist das wohl falsch; außerdem habe ich folgenden Hinweis bekommen: "Eine 0 ist ein Wert, wenn der Index des Feldes kleiner der Größe ist, ansonsten handelt es sich um ein freies Feld". Leider kann ich mit dieser Definition absolut nichts anfangen.

Ich hoffe dass ihr mir helfen könnt; bei Bedarf kann ich natürlich noch meinen bisherigen Code einfügen.
 

Kirby.exe

Top Contributor
Naja also die erste "freie" Stelle in einem Array ist die Stellen, welche durch keinen Wert belegt ist ;)

Umsetzen könntest du diese Methode z.B. so:
Java:
public void setElement(int number){
    array[counter] = number;
    counter++;
}
 

krgewb

Top Contributor
Das Schlüsselwort ist null. Das funktioniert aber nur, wenn du Integer schreibst und nicht int.

Java:
public class Hauptprogramm {

    public static void main(String[] args) {

        Integer[] arrInt = new Integer[5];

        if (arrInt[3] == null) {
            System.out.println("Treffer");
        }

        System.out.println(arrInt[3]);
    }
}
Ausgabe:
Code:
Treffer
null
 

Ap0

Mitglied
@krgewb: Auch dir vielen Dank, allerdings hätte ich noch eine Frage zu deinem Code: wenn man statt int Integer verwendet, handelt es sich wohl um Objekte, die in den Feldern des Arrays stehen? Andernfalls würde der Vergleich mit "null" ja nicht funktionieren, wenn ich mich nicht täusche?
 

Kirby.exe

Top Contributor
Kein Problem ;) Was @krgewb dir etwas näher bringen wollte ist, dass solltest du beispielsweise mit Objekten arbeiten, kannst du über das Array iterieren und an der Stelle wo "null" auftritt ein Element einfügen ;)
 

Kirby.exe

Top Contributor
@krgewb: Auch dir vielen Dank, allerdings hätte ich noch eine Frage zu deinem Code: wenn man statt int Integer verwendet, handelt es sich wohl um Objekte, die in den Feldern des Arrays stehen? Andernfalls würde der Vergleich mit "null" ja nicht funktionieren, wenn ich mich nicht täusche?
Also in den Speicherzellen selbst stehen bei Objekten keine wirklichen Werte sondern lediglich Referenzen zu den Objekten ;) Deshalb nennt man sie auch Referenzdatentypen :)
 

temi

Top Contributor
Was genau ist eine "freie Stelle"?

Es macht einen Unterschied, ob man ein Array von primitiven Typen oder ein Array von Objekten hat.

Probier das mal aus:
Java:
public class Main {

    public static void main(String[] args) {

        int[] a1 = new int[2];
        Integer[] a2 = new Integer[2];

        System.out.println(Arrays.toString(a1));
        System.out.println(Arrays.toString(a2));
    }
}

// Ausgabe

[0, 0]
[null, null]

Beim int-Array wird jede Stelle bei der Erzeugung mit dem Wert 0 initialisiert und kann auch direkt beschrieben werden a1[0] = 42;.

Beim Integer-Array (Integer ist eine sog. Wrapper-Klasse für int, es handelt sich also um Objekte) wird jede Stelle mit "null" initialisiert. Das kann man sich so vorstellen, als wäre das Array ein Regal, in dem man "Integer-Objekte" reinstellen kann. Mit der Erzeugung wird ein leeres Regal erstellt. Die Objekte müssen noch reingestellt werden, z.B. a2[0] = new Integer(42);. Und wie @Kirby_Sike schon geschrieben hat, enthält das Array nur die Referenzen auf die darin gespeicherten Objekte.
 

krgewb

Top Contributor
@Kirby_Sike Integer verhält sich trotzdem anders als gewöhnliche Klassenobjekte (bezüglich Call By Value bzw. Call By Reference). Ich habe es hier erklärt: https://www.java-forum.org/thema/callbyvalue.183910/#post-1174042

Bei Integer:
Java:
public class Hauptprogramm {

    public static void main(String[] args) {

        Integer value1 = 123;
        Integer value2 = 456;

        value1 = value2;

        value2 = 789;

        System.out.println(value1);
    }

}
Ausgabe:
456
 

temi

Top Contributor
@Kirby_Sike Integer verhält sich trotzdem anders als gewöhnliche Klassenobjekte (bezüglich Call By Value bzw. Call By Reference). Ich habe es hier erklärt: https://www.java-forum.org/thema/callbyvalue.183910/#post-1174042

Bei Integer:
Java:
public class Hauptprogramm {

    public static void main(String[] args) {

        Integer value1 = 123;
        Integer value2 = 456;

        value1 = value2;

        value2 = 789;

        System.out.println(value1);
    }

}
Ausgabe:
456

Eigentlich verhält es sich wie jedes andere Objekt, wenn man es mal so ausschreibt, wie es letztlich vom Compiler behandelt wird:
Java:
public class Hauptprogramm {

    public static void main(String[] args) {

        Integer value1 = new Integer(123); // tatsächlich ist es wohl Integer.valueOf(123), es wird jedenfalls eine Instanz von Integer erzeugt.
        Integer value2 = new Integer(456); // dito

        value1 = value2; // Referenz von value2 wird value1 zugewiesen

        value2 = new Integer(789); // value2 wird eine Referenz auf eine neue Instanz zugwiesen.

        System.out.println(value1);
    }

}
Oder habe ich dich falsch verstanden und du meinst etwas anderes.

In deinem verlinkten Beispiel weist du der Variablen auch keine neue Instanz zu, sondern änderst über eine Settermethode den Zustand der ursprünglichen Instanz in der Art von value2.setValue(789);. Allerdings stellt "Integer" diese Möglichkeit nicht zur Verfügung.
 
Zuletzt bearbeitet:

httpdigest

Top Contributor
Was hier vielleicht für ein bisschen Verwirrung sorgt, ist der Unterschied zwischen mutable (veränderbaren) und immutable (unveränderbaren) Objekten.
java.lang.Integer (sowie alle anderen Wrappertypen und auch java.lang.String) sind unveränderbar und somit von Außen auch nicht von "Value"-Typen unterscheidbar (außer vielleicht durch ihre Objektidentität, wenn man darauf synchronisiert). Zwei Variablen können zwar auf dieselbe java.lang.Integer (oder java.lang.String) Instanz "zeigen"; dadurch, dass man aber diese Instanzen in ihrem Wert intern nicht verändern kann, macht es für diese Betrachtung keinen Unterschied, ob man einen java.lang.Integer oder ein int nutzt.
 

temi

Top Contributor
Wie kann ich das per Konsolenausgabe nachvollziehen?
Was meinst du damit?

Integer ist eine Klasse. "value1" und "value2" sind beides Instanzen der Klasse Integer und enthalten somit Referenzen. Die Zuweisung value1 = value2; funktioniert, wie bei jeder anderen Instanz einer Klasse. Und mit der Ausgabe System.out.println(value1); zeigst du ja schon, worauf die Referenz zeigt.

Wichtig ist die Ergänzung von @httpdigest, dass Instanzen von Integer immutabel sind. Es gibt kein value2.setValue(789). Der Compiler macht aus der Zuweisung eines int an eine Integer-Variable value2 = 789; ein value2 = Integer.valueOf(789); und erzeugt eine neue Instanz.
 

temi

Top Contributor
Integer ist eine Klasse. "value1" und "value2" sind beides Instanzen der Klasse Integer und enthalten somit Referenzen. Die Zuweisung value1 = value2; funktioniert, wie bei jeder anderen Instanz einer Klasse. Und mit der Ausgabe System.out.println(value1); zeigst du ja schon, worauf die Referenz zeigt.
Falls du gemeint hast, dass diese Zuweisung auch eine neue Instanz erzeugt; keine Ahnung. Müsste man mal in der Java Language Specification nachschauen oder jemanden fragen, der sich darin wie zuhause fühlt.
 

temi

Top Contributor
Wie kann ich das per Konsolenausgabe nachvollziehen?
Java:
public class Main {

    public static void main(String[] args) {

        Integer value1 = 123;
        Integer value2 = 456;

        System.out.println(System.identityHashCode(value1));
        System.out.println(System.identityHashCode(value2));

        value1 = value2;

        System.out.println(System.identityHashCode(value1));
        System.out.println(System.identityHashCode(value2));
     
        value2 = 789;

        System.out.println(System.identityHashCode(value1));
        System.out.println(System.identityHashCode(value2));
    }
}
618365781
140435067
140435067
140435067
140435067
1450495309

Ein Versuch es nachzuvollziehen. Ich bin aber nicht sicher, ob der Hashcode nicht einfach aus dem Wert gebildet wird.
 
Zuletzt bearbeitet:

temi

Top Contributor
Eine zweiter Versuch. Ich gebe zu, das hier viel copy & paste im Spiel ist;)
Java:
import sun.misc.Unsafe;
import java.lang.reflect.Field;

public class Main {

    private static Unsafe unsafe = getUnsafe();

    public static void main(String[] args) {

        Integer value1 = 123;
        Integer value2 = 456;

        printAddresses("value1", value1);
        printAddresses("value2", value2);

        value1 = value2;

        printAddresses("value1", value1);
        printAddresses("value2", value2);

        value2 = 789;

        printAddresses("value1", value1);
        printAddresses("value2", value2);
    }

    public static void printAddresses(String label, Object... objects) {
        System.out.print(label + ": 0x");
        long last = 0;
        int offset = unsafe.arrayBaseOffset(objects.getClass());
        int scale = unsafe.arrayIndexScale(objects.getClass());
        switch (scale) {
            case 4:
                long factor = 8; // 64 Bit
                final long i1 = (unsafe.getInt(objects, offset) & 0xFFFFFFFFL) * factor;
                System.out.print(Long.toHexString(i1));
                last = i1;
                for (int i = 1; i < objects.length; i++) {
                    final long i2 = (unsafe.getInt(objects, offset + i * 4) & 0xFFFFFFFFL) * factor;
                    if (i2 > last)
                        System.out.print(", +" + Long.toHexString(i2 - last));
                    else
                        System.out.print(", -" + Long.toHexString( last - i2));
                    last = i2;
                }
                break;
            case 8:
                throw new AssertionError("Not supported");
        }
        System.out.println();
    }

    private static Unsafe getUnsafe() {
        try {
            Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
            theUnsafe.setAccessible(true);
            return (Unsafe) theUnsafe.get(null);
        } catch (Exception e) {
            throw new AssertionError(e);
        }
    }
}
value1: 0x7bfc46818
value2: 0x62860d4a0
value1: 0x62860d4a0
value2: 0x62860d4a0
value1: 0x62860d4a0
value2: 0x628658f38
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Objekt erste freie Stelle zuweisen Java Basics - Anfänger-Themen 3
E Nächste freie Zeile in jTable ansprechen Java Basics - Anfänger-Themen 5
Say Stelle in Code herausfinden, wie geht man vor? Java Basics - Anfänger-Themen 12
Fiedelbambu Prüfen von Komma stelle beim Taschenrechner Java Basics - Anfänger-Themen 5
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
L Zeichen an bestimmter Stelle auslesen Java Basics - Anfänger-Themen 4
S Datenbank Tabelle eine Zeile an einer bestimmten Stelle einfügen Java Basics - Anfänger-Themen 2
R Auf eine Stelle [i] des Arrays zugreifen Java Basics - Anfänger-Themen 7
C Zeichen im String bis zu bestimmter Stelle entfernen Java Basics - Anfänger-Themen 6
A Rekursion stoppt an der falschen Stelle Java Basics - Anfänger-Themen 4
D Einlesen funktioniert an einer Stelle nicht und ich kann mir nicht erklären warum Java Basics - Anfänger-Themen 6
S Zahl an bestimmter Stelle splitten Java Basics - Anfänger-Themen 6
R Split ab bestimmter Stelle Java Basics - Anfänger-Themen 9
B Auf die x. Stelle eines Array zugreifen Java Basics - Anfänger-Themen 2
Q Erste Schritte In CharArrayWriter Zeichen an Stelle einfügen Java Basics - Anfänger-Themen 4
J Neue Zeile an bestimmter Stelle in Textdatei einfügen Java Basics - Anfänger-Themen 2
J Array um 1 stelle verschieben Java Basics - Anfänger-Themen 2
J Text kopieren an bestimmter Stelle Java Basics - Anfänger-Themen 8
Rayo ID eines Objektes an Stelle X/Y wiedergeben Java Basics - Anfänger-Themen 2
Z 10er und 100er Stelle durch Modulo Java Basics - Anfänger-Themen 2
D Compiler-Fehler incompatible types bei einer Stelle Java Basics - Anfänger-Themen 34
D Char Array ab bestimmter Stelle in neuem Speichern Java Basics - Anfänger-Themen 13
D Eine Stelle eines Char- Arrays nach dem vorkommen in einem ganzem anderem Array überprüfen Java Basics - Anfänger-Themen 20
J Lösung eines Zahlenintervall wierd an der Falschen Stelle angezeigt. Java Basics - Anfänger-Themen 8
B Erste Schritte Eclipse Indigo sucht jvm.dll an "falscher" Stelle Java Basics - Anfänger-Themen 2
B Input/Output In Datei an eine bestimmte Stelle schreiben Java Basics - Anfänger-Themen 37
B JTextPane nur bis bestimmtes stelle löschen Java Basics - Anfänger-Themen 6
S an bestimmter stelle löschen / einfügen Java Basics - Anfänger-Themen 5
J geschickter Algorithmus um die 'Umgebung' einer stelle eines Arrays zu durchsuchen Java Basics - Anfänger-Themen 7
N String Stelle "nichts" Java Basics - Anfänger-Themen 3
M Problem mit Koordinaten - Objekte werden nicht an gewünschter Stelle gezeichnet Java Basics - Anfänger-Themen 6
StrikeTom Bestimmte stelle in string herausfiltern Java Basics - Anfänger-Themen 7
D Ab bestimmter stelle lesen Java Basics - Anfänger-Themen 3
H LinkedList Element an Stelle x ausgeben? Java Basics - Anfänger-Themen 5
R Erste und zweite Stelle einer Eingabe auslesen Java Basics - Anfänger-Themen 2
N Text an bestimmte Stelle eines Dokuments schreiben Java Basics - Anfänger-Themen 6
S HILFE Wie stelle ich die Path Varibalen wieder ein Java Basics - Anfänger-Themen 4
T Buchstaben an bestimmter Stelle aus String lesen Java Basics - Anfänger-Themen 5
G Float schneidet nach dem Rechnen auf eine Stelle ab Java Basics - Anfänger-Themen 9
D An eine ausgewählte Stelle in der Datei schreiben? Java Basics - Anfänger-Themen 7
G bestimmte Stelle aus Textdatei auslesen. Java Basics - Anfänger-Themen 7
K Leere Stelle im Array finden und ersetzen Java Basics - Anfänger-Themen 10
C GridBagLayout BIld an variabler Stelle einfügen Java Basics - Anfänger-Themen 2
J Programm beenden und Verweis an andere Stelle im Programm Java Basics - Anfänger-Themen 10
Q An erste Stelle in eine Queue eintragen Java Basics - Anfänger-Themen 4
G Auslesen einer bestimmten Stelle in einer Textdatei? Java Basics - Anfänger-Themen 2
G Wert in Zeile an einer bestimmten Stelle ersetzen Java Basics - Anfänger-Themen 2
B String Stelle ausgeben Java Basics - Anfänger-Themen 10
M Wie kann man auf die Konsole an die selbe Stelle schreiben? Java Basics - Anfänger-Themen 4
H Datei lesen und an bestimmter Stelle schreiben Java Basics - Anfänger-Themen 4
S QuickSort will mir nicht in den Kopf (an einer Stelle) Java Basics - Anfänger-Themen 14
G Zeichen an bestimmter Stelle im String einfügen. Java Basics - Anfänger-Themen 4
T Stelle wo ich Properties-Datei auslesen kann? Java Basics - Anfänger-Themen 6
G String.insert an unbekannter Stelle Java Basics - Anfänger-Themen 5
D Split erfolgt nicht an der gewünschten Stelle Java Basics - Anfänger-Themen 3
J Bestimmte Stelle im Array die belegt ist wieder freigeben. Java Basics - Anfänger-Themen 3
L Variable Stelle für Stelle auslesen Java Basics - Anfänger-Themen 2
M JAR-Datei ist nur an einer Stelle im Dateisystem ausführbar Java Basics - Anfänger-Themen 31
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
P Wie kann ich beispielsweise Speicherstände eines Spiels DAUERHAFT in meinem Programm speichern? Java Basics - Anfänger-Themen 3
laxla123 Eigenschaften eines Algorithmus (determiniert vs.. deterministisch) Java Basics - Anfänger-Themen 2
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
J Farbe des Striches eines TitledBorders ändern Java Basics - Anfänger-Themen 2
pc pc pc pc pc letztes Element eines Arrays n Java Basics - Anfänger-Themen 3
walid Öffnungszeiten eines Geschäftes Java Basics - Anfänger-Themen 3
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
U Eigenschaft eines JTextfiels per ActionListener ändern... Java Basics - Anfänger-Themen 2
B Synchronisation eines kleinen Museums Java Basics - Anfänger-Themen 47
krgewb Breite und Höhe eines Bildes in base64 auslesen Java Basics - Anfänger-Themen 3
Sachinbhatt Was ist die Notwendigkeit eines Sammlungsframeworks in Java? Java Basics - Anfänger-Themen 2
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
B Produkt eines double - streams Java Basics - Anfänger-Themen 3
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
S Variablen Letzte Zeile eines Strings entfernen Java Basics - Anfänger-Themen 1
D Inhalt eines Arrays ausgeben Java Basics - Anfänger-Themen 7
A Jedes zweite Element eines Arrays entfernen Java Basics - Anfänger-Themen 30
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
J Größe eines Strings in Pixel Java Basics - Anfänger-Themen 18
M Parse-Tree eines statements darstellen Java Basics - Anfänger-Themen 0
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
J Hinzufügen eines Objektes in ein Objekt-Array Java Basics - Anfänger-Themen 62
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
A Rekursive Implementation eines Codes Java Basics - Anfänger-Themen 4
H String Repräsentation eines Rechtecks mit Instanz-Methode Java Basics - Anfänger-Themen 8
M Konstruktor ohne Übergabe eines Wertes Java Basics - Anfänger-Themen 7
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8
M Wie erreiche ich das Vorwärtsgehen eines Roboters? Java Basics - Anfänger-Themen 2
M Wie erreiche ich es das Vorwärtsgehen eines Roboters? Java Basics - Anfänger-Themen 0
R While-Loop der die Einträge eines Arrays in umgekehrter Reihenfolge anzeigt Java Basics - Anfänger-Themen 3
A Optimierung eines Programms: Mergen der Dateien Java Basics - Anfänger-Themen 23
melisax Alle Möglichkeiten eines Wortes angeben Java Basics - Anfänger-Themen 3
A Java, verarbeitung eines xml-files Java Basics - Anfänger-Themen 2
C Fehler beim erstellen eines Objektes Java Basics - Anfänger-Themen 3
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
F Initialisieren eines Web-Mp3 Players in Tabs durch "booleans" erst wenn Tab geöffnet wird ...? Java Basics - Anfänger-Themen 1
P Drei Zahlen eines Würfelspiels auswerten Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben