Verwenden von Variablen aus anderen Klassen

t__rick

Mitglied
Ziemlich genau das gleiche Problem wurde hier schonmal diskutiert undzwar in http://www.java-forum.org/java-basi...835-variablen-fremden-objekten-zugreifen.html

Da ich allerdings nach einer Eigenen Lösung suche und nicht ganz dem dort gegebenen Quelltext folgen kann folgende Frage also gegeben ist selbige Aufgabenstellung mit dem nicht zu verändernden Quelltext:

Java:
/**
 * Klasse FunctionalSimulator ist ein einfacher Logiksimulator, der nur 
 * Nand-Gatter simulieren kann und keine Zeitverz�gerungen ber�cksichtigt.
 * Die zu simulierende Schaltung wird im Konstruktor der Klasse erzeugt.
 * Es handelt sich hierbei um einen einfachen Volladdierer.
 * Zum Testen Ihrer Klassen <CODE>Nand</CODE> und <CODE>Signal</CODE> m�ssen Sie
 * einfach nur eine Instanz dieser Klasse erzeugen und dann die Methode
 * <CODE>simulate()</CODE> aufrufen.
 * @author Christian Hochberger, TU Dresden
 * @version 1.0 Erste Fassung
 */
public class FunctionalSimulator {
    // Eing�nge (i1-i3) und Ausg�nge (s1,s0) der Schaltung
    Signal  i1,i2,i3,s1,s0;
    // Innere Signale, geben das invertierte Signal der Eing�nge an
    Signal  ni1,ni2,ni3;
    // Innere Signale, die bei der Berechnung der Summe ben�tigt werden
    Signal  t1,t2,t3,t4,t5,t6,t7;

    // Nand-Gatter zum Invertieren der Eing�nge
    Nand    inv1,inv2,inv3;
    // Nand-Gatter zur Berechnung der Summe
    Nand    n1,n2,n3,n4,n5,n6,n7,n8,n9;

    /**
     * Konstruktor, der die zu simulierende Schaltung aufbaut.
     * Simuliert wird ein einfache Volladdierer.
     */
    public FunctionalSimulator() {
    // Alle Signale anlegen
    // Der Konstruktor bekommt einen Signalnamen als Parameter
    i1=new Signal("i1");
    i2=new Signal("i2");
    i3=new Signal("i3");
    ni1=new Signal("ni1");
    ni2=new Signal("ni2");
    ni3=new Signal("ni3");
    s1=new Signal("s1");
    s0=new Signal("s0");
    t1=new Signal("t1");
    t2=new Signal("t2");
    t3=new Signal("t3");
    t4=new Signal("t4");
    t5=new Signal("t5");
    t6=new Signal("t6");
    t7=new Signal("t7");

    // Alle Gatter anlegen
    // Parameter des Konstruktors ist die Anzahl von Eing�ngen
    // Die Inverter sind sozusagen entartete Nand-Gatter (1 Eingang)
    inv1=new Nand(1);
    inv2=new Nand(1);
    inv3=new Nand(1);
    n1=new Nand(3);
    n2=new Nand(3);
    n3=new Nand(3);
    n4=new Nand(3);
    n5=new Nand(3);
    n6=new Nand(3);
    n7=new Nand(3);

    n8=new Nand(4);
    n9=new Nand(4);

    // Inverter mit Ein- und Ausg�ngen verbinden.
    // Die Methode setInput() des Gatters bekommt die Nummer des Eingangs
    // und das Signal, mit dem dieser Eingang verbunden werden soll.
    inv1.setInput(0,i1);
    // Die Methode setOutput() bekommt nur ein Signal, welches durch diesen
    // Ausgang bestimmt wird
    inv1.setOutput(ni1);
    inv2.setInput(0,i2);
    inv2.setOutput(ni2);
    inv3.setInput(0,i3);
    inv3.setOutput(ni3);

    // Die Nand-Gatter zur Summenberechnung richtig verbinden
    n1.setInput(0,ni1);
    n1.setInput(1,ni2);
    n1.setInput(2,i3);
    n1.setOutput(t1);
    
    n2.setInput(0,ni1);
    n2.setInput(1,i2);
    n2.setInput(2,ni3);
    n2.setOutput(t2);
    
    n3.setInput(0,ni1);
    n3.setInput(1,i2);
    n3.setInput(2,i3);
    n3.setOutput(t3);
    
    n4.setInput(0,i1);
    n4.setInput(1,ni2);
    n4.setInput(2,ni3);
    n4.setOutput(t4);
    
    n5.setInput(0,i1);
    n5.setInput(1,ni2);
    n5.setInput(2,i3);
    n5.setOutput(t5);
    
    n6.setInput(0,i1);
    n6.setInput(1,i2);
    n6.setInput(2,ni3);
    n6.setOutput(t6);
    
    n7.setInput(0,i1);
    n7.setInput(1,i2);
    n7.setInput(2,i3);
    n7.setOutput(t7);

    // n8 und n9 berechnen die eigentlichen Ausg�nge
    n8.setInput(0,t1);
    n8.setInput(1,t2);
    n8.setInput(2,t4);
    n8.setInput(3,t7);
    n8.setOutput(s0);

    n9.setInput(0,t3);
    n9.setInput(1,t5);
    n9.setInput(2,t6);
    n9.setInput(3,t7);
    n9.setOutput(s1);

    // Die Signale s1 und s0 sind mit keinen weiteren Gattern verbunden.
    // Sorgen Sie daf�r, dass in diesem Fall eine Wert�nderung dieser
    // Signale ausgegeben wird.
    }

    /**
     * Diese Methode f�hrt die eigentliche Simulation durch. Dazu werden den
     * Eingangssignalen (i1,i2,i3) einfach nur neue Werte zugeordnet. Diese
     * Wert�nderungen propagieren sich dann durch die Schaltung bis zum Ausgang
     * und werden dort ausgegeben.
     */
    public void simulate() {
    // Zun�chst alle Eing�nge auf false setzen (ist zwar schon nach dem)
    // Erzeugen des Gatters so, aber durch ein erneutes Setzen werden
    // die inneren Signale der Schaltung vern�nftig berechnet)
    i1.setValue(false);
    i2.setValue(false);
    i3.setValue(false);

    // Eingang i1 auf true: Dadurch sollte als Summe s1=false und s0=true
    // herauskommen. Es ist aber normal, dass �nderungen an s1 und s0 mehrfach
    // ausgegeben werden, bevor das Endergebnis herauskommt.
    System.out.println("==== i1 -> true");
    i1.setValue(true);
    
    // Eingang i1 und i2 auf true: Dadurch sollte als Summe s1=true und
    // s0=false herauskommen.
    System.out.println("==== i2 -> true");
    i2.setValue(true);
    
    // Eingang i1,i2 und i3 auf true: Dadurch sollte als Summe s1=true und
    // s0=true herauskommen.
    System.out.println("==== i3 -> true");
    i3.setValue(true);
    
    // Eingang i1 und i3 auf true: Dadurch sollte als Summe s1=true und
    // s0=false herauskommen.
    System.out.println("==== i2 -> false");
    i2.setValue(false);
    
    // Eingang i3 auf true: Dadurch sollte als Summe s1=false und
    // s0=true herauskommen.
    System.out.println("==== i1 -> false");
    i1.setValue(false);
    
    // Eingang i2 und i3 auf true: Dadurch sollte als Summe s1=true und
    // s0=false herauskommen.
    System.out.println("==== i2 -> true");
    i2.setValue(true);
    }    
    /**
     * Main Methode dieser Klasse. Sie m�ssen das im Moment noch nicht
     * verstehen. Diese Methode wird ben�tigt, wenn Sie den Simulator ohne
     * BlueJ laufen lassen wollen. Wenn Sie diese Klasse in BlueJ nutzen,
     * dann ignorieren Sie diese Methode einfach.
     */
    public static void main(String[] args) {
	FunctionalSimulator s=new FunctionalSimulator();

	s.simulate();
    }
}

Nun habe ich soweit die Klassen Nand und Signal geschrieben, mir fehlt allerdings das Wissen um den Status des Signals in Nand zu bekommen.

Nand:
Java:
import java.util.ArrayList;
import java.util.Iterator;

public class Nand
{   
    private ArrayList<Signal> inputspeicher;
    private int anzahl, eingangnummer;
    private boolean wert, a, b, c, d, ergebnis;
    private int[] eingangsnummerSpeicher;
    private String[] signalnameSpeicher;
    //lege die Größe der ArrayList anhand der eingänge fest
    public Nand(int eingaenge)
    {
        inputspeicher = new ArrayList(eingaenge);
    }
    //übernahme der gesendeten Werte, soll verbindeNameSignal zuspielen
    public void setInput(int eingangsnummer, Signal name)
    {   
        inputspeicher.add(eingangsnummer, name);   
    }
    // Ordne dem Signal mit Name "name" ein boolean zu
    public void verbindeNameSignal()
    {
        
    }
    // test ob letztes Gatter
    public void folgtGatter()
    {
        if (Signal.getName == s1 || Signal.getName== s0)
        {
            system.out.println( Signal.getName + ">" + Signal.getAktuellerstatus);
        }
    }
    //verknüpfe die wahrheitswerte logisch und gebe ergebnis zurück
    public boolean setOutput(boolean ausgangswert)
    {
        ergebnis = !(a&&b&&c&&d);
        return ergebnis;
    }
    
}

Signal:
Java:
import java.util.ArrayList;
public class Signal
{
    private String name;
    private boolean neuerwert, aktuellerstatus;
    //gib der Klasse den gesendeten Namen "name"
    public Signal(String sname)
    {
        name = sname;
    }
    //direkter Zugriff aus FunctionalSimulator um Startwerte festzulegen
    public void setValue(boolean wert)
    {
        neuerwert = wert;
    }
    //aktuellen Wahrheitswert für Nand auslesen
    public boolean getAktuellerstatus()
    {
        aktuellerstatus = neuerwert;
        return aktuellerstatus;
    }
    //Name des Signals für Nand auslesen
    public String getName()
    {
        return name;
    }
    //output aus Nand in Signal aufnehmen
    public void neuerWahrheitswert(boolean output)
    {
        neuerwert = output;
    }
}

Ich weis das da noch ein paar andere Fehler drin sind, mir gehts allerdings Hauptsächlich nur um dieses Problem...waere cool wenn jemand da nen Ansatz hätte.

Gruß
 

Da_Tebe

Mitglied
Bei kuzem Überfliegen nehme ich mal an, dass du dich mit dem Thema "setter & getter" auseinander setzten solltest.
Wenn dir das schon bekannt ist dann sry =D
 

t__rick

Mitglied
Ja das ist das Problem...weder in Buch noch Skript exisitieren verständliche Erklärungen und google stellt mich auch nicht wirklich glücklich.

Wie rufe ich denn aus einer get Methode die Variable die ich dort zurückgebe in einer anderen Klasse auf?
 
N

nillehammer

Gast
Mal am Beispiel des Feldes
Code:
private int anzahl
von Nand. Ergänze den Code in Nand um folgende zwei Methoden:
Java:
public class Nand
...
public int getAnzahl() {
  return this.anzahl;
}

public void setAnzahl(int anzahl) {
  this.anzahl = anzahl;
}

Und verwenden tust Du es dann wie folgt:
Java:
int meinNandEingangsAnzahl = 7;
Nand meinNand = new Nand(meinNandEingangsAnzahl);
meinNand.setAnzahl(5);
System.out.println(meinNand.getAnzahl());

Ach und nochwas, sowas hier ist nicht so gut:
Java:
    //aktuellen Wahrheitswert für Nand auslesen
    public boolean getAktuellerstatus()
    {
        aktuellerstatus = neuerwert;
        return aktuellerstatus;
    }
Ein Getter sollte wirklich nur den Wert auslesen und zurückgeben. Eine Änderung des Wertes ist überraschend und eine potenzielle Fehlerquelle. Einzige Ausnahme: Ad hoc Initialisierung von null-Werten.
 
Zuletzt bearbeitet von einem Moderator:

Da_Tebe

Mitglied
Ein Getter sollte wirklich nur den Wert auslesen und zurückgeben

Richtig. Benenne deine Getter gut. Wenn du den aktuellen Status zurück gibst nen ihn
"getAktuellerstatus()". Wenn etwas zurückgegeben wird was sich aus anderen Variablen ergibt
(z.B. das Volumen aus den Variablen für Länge und Breite) dann nenn es passend (hier getVolumen oder so)
Gibt nix schlimmeres als das was nillehammer gesagt hat. Man geht von etwas aus was man aber überhaupt nicht bekommt am Ende ^^
 

Da_Tebe

Mitglied
Java:
int meinNandEingangsAnzahl = 7;
Nand meinNand = new Nand(meinNandEingangsAnzahl);
meinNand.setAnzahl(5);
System.out.println(meinNand.getAnzahl());

1 Zeile: Erzeugt eine int Zahl mit dem Wert 7
2 Zeile: Erzeugt ein Objekt von Nand und übergibt den Wert 7
3 Zeile: Nimmt das gerade erstellte Objekt und führt die methode "setAnzahl" aus. Diese ändert
den Wert von zuvor 7 auf nun 5.
4 Zeile: Schreibt in die Konsole den Wert des erstellten Objektes mit Hilfe einer getter Methode.
Ausgabe wäre 5
 

GGK_01

Bekanntes Mitglied
danke....wenn sich der Thread Eröffner nicht bedankt..dann mach cih das...haber gerade meine erste Setter Getter geschrieben

GGK
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Variablen aus anderen Klassen übergreifend verwenden Java Basics - Anfänger-Themen 7
C Variablen in Schleifen außerhalb verwenden Java Basics - Anfänger-Themen 2
X OOP Methoden und Variablen in anderer Klasse verwenden Java Basics - Anfänger-Themen 5
O Kann ich für Array-Namen Variablen verwenden? Java Basics - Anfänger-Themen 2
D Dynamische Objektnamen / Variablen als Objektnamen verwenden Java Basics - Anfänger-Themen 3
C Interface Parameter und Rückgabewerte in Lambda Ausdrücken verwenden Java Basics - Anfänger-Themen 16
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
R Operatoren Rechenoperation verwenden für Taschenrechner. Java Basics - Anfänger-Themen 32
D next() Methode mehrfach verwenden Java Basics - Anfänger-Themen 1
N Kann man einen Iterator nur einmal verwenden Java Basics - Anfänger-Themen 5
I Scheduling: "Quartz" verwenden, Hilfe bei Umstellung Java Basics - Anfänger-Themen 3
B non-modular dependency in modularem Projekt verwenden Java Basics - Anfänger-Themen 3
A Ergebnis einer Methode bei einer anderen verwenden Java Basics - Anfänger-Themen 13
B Jar Dateien ohne IDE verwenden? Java Basics - Anfänger-Themen 1
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
Ameise04 Variablen Inhalt einer Variable im Code verwenden? Java Basics - Anfänger-Themen 9
P Objekt in mehreren Methoden verwenden. Java Basics - Anfänger-Themen 3
A Methode in einer anderen Klasse verwenden Java Basics - Anfänger-Themen 1
V Wachstum berechnen und in Ist-Formel verwenden Java Basics - Anfänger-Themen 5
M this.object in einer parameterlosen Methode verwenden Java Basics - Anfänger-Themen 3
S Klassen instanziieren und verwenden von Getter und Setter Java Basics - Anfänger-Themen 4
Torsten.E JavaFX mit Visual Studio Code verwenden Java Basics - Anfänger-Themen 1
S Verwenden von throw Exception an der Funktion Java Basics - Anfänger-Themen 2
K Boolean in einer erstellten Klasse verwenden Java Basics - Anfänger-Themen 14
J Methoden Methoden einer public class AutoCompleteTextField verwenden Java Basics - Anfänger-Themen 14
PaperHat Methoden als Parameter anderer Methode verwenden Java Basics - Anfänger-Themen 11
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
E Sinn: final in Parameterliste verwenden Java Basics - Anfänger-Themen 2
M Klassen Warum sollte man Abstraktion verwenden? Java Basics - Anfänger-Themen 4
N Attribut einer anderen Klasse übertragen/verwenden Java Basics - Anfänger-Themen 5
M Probleme beim verwenden von Packages Java Basics - Anfänger-Themen 6
C Polymorphie Was genau ist Polymorphie und wann genau sollte man es verwenden? Java Basics - Anfänger-Themen 9
T Klassen Klasse in einer anderen Klasse verwenden. Java Basics - Anfänger-Themen 3
S Eingabe in anderer Klasse verwenden Java Basics - Anfänger-Themen 3
M Schleifenergebnis in selbiger wieder verwenden Java Basics - Anfänger-Themen 7
A OOP ArrayList verwenden Java Basics - Anfänger-Themen 3
M Erste Schritte Arraylist in einer anderen Klasse verwenden Java Basics - Anfänger-Themen 11
I BigDecimal als Parameter verwenden Java Basics - Anfänger-Themen 3
D ArrayList in einer anderen Klasse verwenden Java Basics - Anfänger-Themen 7
NightmareVirus überschriebene Methode der Oberklasse verwenden Java Basics - Anfänger-Themen 3
J Parameter in main verwenden Java Basics - Anfänger-Themen 3
M Eingabe des Benutzers Verwenden Java Basics - Anfänger-Themen 9
P Quadratzeichen verwenden Java Basics - Anfänger-Themen 7
H Methoden verwenden Java Basics - Anfänger-Themen 4
B Interface JTextField Eingabe als String verwenden Java Basics - Anfänger-Themen 3
OlafHD Variable aus einer anderen Klasse Verwenden Java Basics - Anfänger-Themen 11
K Dateien aus Source-Package verwenden Java Basics - Anfänger-Themen 10
N System Proxy verwenden Java Basics - Anfänger-Themen 0
J Erste Schritte Scanner negative zahl einlesen und verwenden. Java Basics - Anfänger-Themen 6
G Wie kann man den Erfolg einer Zuweisung als Boolean Wert verwenden? Java Basics - Anfänger-Themen 12
H jar datei verwenden Java Basics - Anfänger-Themen 1
J ArrayList über verschiedene Klassen verwenden Java Basics - Anfänger-Themen 7
C compareTo verwenden Java Basics - Anfänger-Themen 2
W IllegalArgumentException 2 mal verwenden Java Basics - Anfänger-Themen 3
S Variablen Vektor zur Berechnung verwenden Java Basics - Anfänger-Themen 4
L Dialogbox statt Konsole verwenden Java Basics - Anfänger-Themen 5
P JSON-Konfigurationsdatei verwenden: Probleme mit Pfad Java Basics - Anfänger-Themen 1
W Darf man den Übergabeparameter in einer Methode nicht verwenden? Java Basics - Anfänger-Themen 2
E Methode aus Klasse eins in Klasse zwei verwenden? Java Basics - Anfänger-Themen 2
E Datentypen Benutzerdefinierten Datentyp verwenden Java Basics - Anfänger-Themen 1
J Objekte zur Laufzeit erzeugen und direkt verwenden Java Basics - Anfänger-Themen 9
B Zahlen zerlegen und verwenden Java Basics - Anfänger-Themen 2
S Inhalt aus anderen Klassen verwenden Java Basics - Anfänger-Themen 1
I Rückgabewert einer Methode in anderer Klasse verwenden Java Basics - Anfänger-Themen 2
T Vererbung Variable aus anderer Klasse verwenden Java Basics - Anfänger-Themen 8
T File aus Classpath verwenden Java Basics - Anfänger-Themen 3
B Klassen Eigene "non static" Klasse in Main verwenden! Java Basics - Anfänger-Themen 12
T Array in andere Klasse verwenden Java Basics - Anfänger-Themen 3
K Von einem Double wert nur die Zahl vor dem Komma verwenden Java Basics - Anfänger-Themen 9
T Globale Variable mehrmals verwenden Java Basics - Anfänger-Themen 7
M Class Datein aus einen Unterordner verwenden Java Basics - Anfänger-Themen 2
B Objekt in mehereren Klassen verwenden Java Basics - Anfänger-Themen 4
L Erste Schritte Methode aus anderer Klasse verwenden Java Basics - Anfänger-Themen 16
M Wann final verwenden? Java Basics - Anfänger-Themen 5
M Wann eine Wrapper Klasse verwenden und wann einen primitiven Datentypen? Java Basics - Anfänger-Themen 8
G ArrayList in anderer Klasse verwenden Java Basics - Anfänger-Themen 31
D Erste Schritte Countdown mehrfach verwenden Java Basics - Anfänger-Themen 5
D Wert einer Variable in paint-Methode verwenden Java Basics - Anfänger-Themen 2
E wann welche Konstanten verwenden? Java Basics - Anfänger-Themen 7
K JTextField auslesen, in int umwandeln und in einer anderen Klasse als Zähler verwenden Java Basics - Anfänger-Themen 3
T return-Wert verwenden? Java Basics - Anfänger-Themen 12
I SwingUtilities.invokeLater - Wie verwenden für meinen Code? Java Basics - Anfänger-Themen 4
Y this verwenden oder nicht? Java Basics - Anfänger-Themen 23
O Absolute Pfade in mehrere Klassen verwenden Java Basics - Anfänger-Themen 3
D JTextField verwenden ohne Eingabe einer Variable Java Basics - Anfänger-Themen 4
R Switch Werte außerhalb verwenden Java Basics - Anfänger-Themen 2
L Objekte aus einem void in anderen voids verwenden Java Basics - Anfänger-Themen 8
MiMa Zip in util verwenden Java Basics - Anfänger-Themen 7
P Liste in einer Klasse füllen und mehreren anderen Klassen lesend verwenden Java Basics - Anfänger-Themen 5
K Mehrere Klassen beim JavaEditor verwenden - möglich? Java Basics - Anfänger-Themen 8
K Klassen Eigene Exception verwenden Java Basics - Anfänger-Themen 9
S Scanner -> Zahl lesen und weiter verwenden Java Basics - Anfänger-Themen 8
SexyPenny90 JLabel Text und Icon untereinander verwenden Java Basics - Anfänger-Themen 3
J eigene packages bzw klassen verwenden Java Basics - Anfänger-Themen 25
P Date oder Kalender? Was soll man verwenden? Java Basics - Anfänger-Themen 2
K Wann Vererbung und wann Interface verwenden? Java Basics - Anfänger-Themen 12
A Wenn genau welche Liste verwenden? Java Basics - Anfänger-Themen 6
P Java Stream, wann welche Stream verwenden? Java Basics - Anfänger-Themen 3
M gleiche Box in GUI mehrmals verwenden Java Basics - Anfänger-Themen 5
L Erste Schritte Sollte ich hier lieber Cases verwenden oder wäre eine If-Bedingung besser? Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben