Variablen Array Länge über den Konstruktor definieren

Diskutiere Array Länge über den Konstruktor definieren im Java Basics - Anfänger-Themen Bereich.
G

Goldenprime

Ich arbeite gerade an einer Klasse die Objekte mit einem Array Attribut haben sollen, aber die länge dieses Arrays ist für jedes der Objekte verschieden, weshalb die Variable für die Arraylänge im Konstruktor übergeben werden muss. Mein Problem ist jetzt, dass obwohl ich im Konstruktor den gewünschten Wert übergeben kann, der dann in ein Anderes Attribut der Klasse Übergeben wird, welches dann im Längenparameter des Arrays steht, die Länge des Arrays immer 0 ist und nicht der Wert den ich ursprünglich im dem Konstruktor übergeben habe.
Das Hier bezieht sich auf das Attribut InputState[] und der Konstruktor ist Logischerweise UniGate.

Java:
package com.ic.logic.pro;

public class UniGate {
    public UniGate(final int InputCount, String Type) {
        if(Type == "and" || Type == "or" || Type == "xor" || (Type == "not" & InputCount == 1) || (Type == "buffer" & InputCount == 1)) {
    this.InputCount = InputCount;
    Type2 = Type;
            }
            else {
                System.out.println("invalid command");
            }
    }
    private String Type2;
    private int InputCount;
    private boolean Status = false;
    private int[] InputState = new int[InputCount];
    public int getInputState(int Number) {
        return InputState[Number];
    }
    public void setInputState(int Number, int State) {
        InputState[Number] = State;
        System.out.println(InputState.length);
        Refresh();
    }
    public void Refresh() {
        int i = 0;
        int result = 0;
        while(i<InputCount) {
            if(InputState[i] == 1) {
                result ++;
            }
            i++;
        }
        if (result == InputCount & Type2 == "and") {
            Status = true;
        }
        else if (result > 0 & Type2 == "or") {
            Status = true;
        }
        else if (result == 1 & Type2 == "xor") {
            Status = true;
        }
        else if (result == 0 & Type2 == "not") {
            Status = true;
        }
        else if (result == 1 & Type2 == "buffer") {
            Status = true;
        }
        else {
            Status = false;
        }
    }
    public boolean GetStatus() {
        return Status;
    }

}
 
L

LimDul

Anmerkung vorneweg - Strings vergleicht man man quals nicht mit ==.

Du musst das Array im Konstruktor erzeugen, nicht direkt in der Variablendeklaration. Die Variablen-Deklarationen werden gemacht, bevor der Konstruktor ausgeführt wird. Zu dem Zeitpunkt ist inputCount aber noch 0.
 
L

LimDul

Noch ein paar Anmerkungen & ist das bitweise Und, du meinst mit Sicherheit && im Konstruktor.
Und Variablen und Methoden fangen in Java normalerweise mit einem Kleinbuchstaben an.
 
G

Goldenprime

Also erst mal danke für die ganzen Tipps. Ich habe es umgeschrieben und jetzt funktioniert es.
 
T

temi

Noch eine Anmerkung bezüglich von Code-Konventionen.

In Java beginnen Klassennamen mit einem Großbuchstaben z.B. MeineTolleKlasse (sog. UpperCamelCase). Variablen- und Methodennamen beginnen mit einem kleinen Buchstaben, z.B. int meineVariable (sog. lowerCamelCase).

In deinem Code z.B. hier:
Java:
public void setInputState(int Number, int State) {
// wird zu
public void setInputState(int number, int state) {
(Du siehst hier schon an der Farbwahl, dass die Forensoftware die Namen "Number" und "State" als Klassen interpretiert. Noch ungünstiger ist, dass es in der Java-Klassenbibliothek schon eine Klasse "Number" gibt)

oder
Java:
private String Type2;
// wird zu
private String type2;
Wobei zusätzlich der Name möglichst genau ausdrücken sollte, welche Funktion die Variable/Methode genau hat. "type2" ist insofern kein guter Name.

EDIT:

In deinem Fall kommt der Name "Type2" daher, dass der Parameter ebenfalls bereits "Type" heißt. Das Problem lässt sich leicht lösen:
Java:
class Foo {
    private int type; // dieses "type" ist gleich "this.type"

    public Foo(int type) {
        type = type; // FEHLER!

        this.type = type; // RICHTIG: Mit "this" wird auf die Instanzvariable "type" referenziert
    }
}
 
Zuletzt bearbeitet:
Thema: 

Array Länge über den Konstruktor definieren

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben