Probleme bei der Abstraktion der realen Welt

Status
Nicht offen für weitere Antworten.

Injen

Mitglied
Hi!

Ich möchte hier kein Blatt vor den Mund nehmen........ich studiere momentan E-Technik und habe im Rahmen eines Informatik-Praktikums die Aufgabe mit Java einen Simulator für Logikschaltungen zu implementieren, jedoch keine Ahnung. Zunächst gilt dabei die Vereinfachung nur mit NAND Gattern und ohne Zeitverhalten zu simulieren. Einlesen von Schaltungen wird ebenso noch nicht betrachtet.

Nun ist das Problem, dass ich nie in meinem Leben programmiert habe und entsprechend große Probleme dabei habe.
Konkret habe ich die Sache bis jetzt wie folgt aufgebaut:

Es existieren 2 Klassen (Signal und NAND), die meine NAND-Gatter bzw. Signale enthalten. Je eine enthält einen Konstruktor, der beim erstellen eines Gatters nach der Anzahl der Eingänge fragt (int Eingaenge), in der Klasse Signal, wird über den Konstruktor lediglich der Name des Signals implementiert. (String)
Nun habe ich 2 Probleme:
1. Wie soll ich nun aus dem int entsprechend die Variablen gewinnen? Wenn ich beispielsweise dort 3 eingebe, möchte ich ja, dass 3 Variablen für dieses Objekt erzeugt werden. Diese sollen Durchnummeriert sein, also eben Eingang 0, 1.....etc heissen.
2. Wie schaffe ich es nachher bei den Signalen diese an das Gatter zu knüpfen. Prnzipiell soll es eine Methode geben, die (je nach Gatter) die Eingänge belegt. Also nach der Nummer des Eingangs am Gatter fragt und welches Signal darauf gesetzt werden soll. Dabei aber nicht ob true/false sondern eben den Namen des Signals.

zu 1. fiel mir bis jetzt noch garnichts ein, ausser einer if Bedingung.........also eben:

Code:
if (int Eingaenge >= 1) {
boolean a;} 
if (int Eingaenge >= 2) {
boolean b

usw. Das hat aber den Nachteil, dass die Anzahl der Eingänge begrenzt ist und es ist sicherlich auch die beknackteste Variante die es gibt.

zu 2. wollte ich eine HashMap erstellen, die eben alle Signale kennt und sie dann einem Gattereingang zuordnet. Dabei müsste man jedoch zwischen den verschiedenen Gattern unterscheiden, denn es wird ja mehr als eines geben.

Ich habe in der Hinsicht extreme Probleme von meinen realen Sachverhalten aus zu abstrahieren (das ist ja das Prinzip, wenn ichs richtig verstanden habe). Ich hoffe ihr könnt mir irgendwie helfen, denn weder Google noch sonst was gab mir eine absolute Deppenbeschreibung zum programmieren mit Java. Leider nichtmal unsere Bibliothek.


In größter Ehrfurcht vor Programmierern.....

Manuel
 

Campino

Top Contributor
Grundsätzlich klingt das schon so, als hättest du mehr drauf, als manch ein anderer, der hier Fragen stellt.

Für deine Eingänge:Nimm am Besten ein Array?
In einem der besten Onlie-Java- Erklärbücher, nämlich "Java ist auch eine Insel" (http://www.galileocomputing.de/open...03_009.htm#ixfccb22419d5f39a0bb20fae0a5f5bd3f), steht: "Er ist mit einem Setzkasten vergleichbar, in dem die Plätze durchnummeriert sind". Und ob nun ein Setzkasten mit durchnummerierten Plätzen oder ein NAND- Gatter mit durchnumerierten Eingängen ist doch letztendlich egal, oder?
Dann musst du, soweit ich das verstanden habe (ich kannn Java, aber keine E- Technik ;) ), jedem Eingang ein Signal zuordnen, dabei haben die Signale Namen. Dann nimmst du am besten einen String- Array und schreibst da rein, welcher Signalname zu welchem Eingang gehört (oder einen Signal- Array wo das Signal selbst rein kommt). Deine Methode muss jetzt nur den entsprechenden Wert im Array setzen.

So ein "Signal" ist jetzt ein Boolean- Wert, der an das Gatter übergeben wird, oder? In der Realität vermutlich ein Anschluss, an dem Strom anliegt (true) oder eben nicht (false)?

Beim Starten der Simulation muss jetzt quasi das Gatter alle Eingänge durchgehen (Stichwort: Schleife) und von dort den Wert holen, dann passiert irgendwas und das Gatter gibt wieder einen boolean- Wert aus. Dafür nimmst du am besten eine "Simulation"- Funktion, die beim Starten der Simulation aufgerufen wird.

Hilft dir das scchon ein bisschen?
campino
 
G

Guest

Gast
Hi!

Oh ja das hilft mir schon sehr. Einzig "Simulation-Funktion" sagt mir nichts. Ich dachte man könnte das Array (Eingänge) einfach auslesen, nachdem man über die Methode den Signalen Werte zugeordnet hat, und verknüpft sie mit den logischen Funktionen von Java.........also && ! etc.

Werde mich erstmal nun durch deinen Link boxen.........der is schon bei den Favoriten bei :D
 

Injen

Mitglied
Nochmal Hi!

Also die Sache hat schon arg geholfen. Ich habe nun erstmal für die Klasse NAND ein Array erzeugt. Dass es die Länge "eingaenge" hat (wird beim erzeugen des NANDs angegeben) bekomme ich auch hin. Aber irgendwie habe ich noch nicht gefunden wie ich dort dann z.B. an die Position 3 den String "ABC" stellen kann.
Das Ausgeben der Länge des Arrays funktioniert ebenfalls, blos auch hier das Problem, dass ich ein Spezielles Element nicht ausgeben kann. Habe dazu mal folgendes geschrieben:

Code:
public NAND(int eingaenge)
    {
        // initialise instance variables
        String[] eingänge = { "a", "b", "c", "d", "e" };
        System.out.println ( eingänge.length );
    }
    
    
    public String arrayNr2Ausgeben()
    {
       return eingänge [ 2 ];
    }

Der Compiler heult da nicht rum. Es wird mir eben beim erstellen eines NANDs ne 5 ausgegeben. Der Compiler mekkert auch nicht, aber wenn ich die Methode aufrufe bekomme ich "NullPoiterEception".
Muss ich den Index irgendwie noch definieren oder sowas?

Und nóch ne Frage zu diesen Importen von Packeten:
Habe jetzt "import java.util.Arraylist" dort geladen...........ist das das richtige oder denkt er nun das ist ne Arraylist?

Erwähnenswert wäre vielleicht noch, dass ich das ganze mit BlueJ mache. Das wurde uns zur Verfügung gestellt.

langsam vorrankommender Manuel
 

diggaa1984

Top Contributor
Code:
public NAND(int eingaenge)
    {
        // initialise instance variables
        String[] eingänge = { "a", "b", "c", "d", "e" };
        System.out.println ( eingänge.length );
    }
    
    
    public String arrayNr2Ausgeben()
    {
       return eingänge [ 2 ];
    }

du versuchst in der unteren Methode auf ein Array zuzugereifen was vermutlich nicht existiert. Im Konstruktor hast du zwar ein Array "eingänge" allerdings ist dieses nur im Konstruktor gültig, da dort lokal deklariert.

allg. könnte die Klasse so aussehen:

Code:
public class NAND {
    
    String[] eingaenge;

    public NAND(int anzahlEingaenge) {
        eingaenge = new String[anzahlEingaenge];
        //dieses dann zB in einer Schleife füllen
        for (int i=0;i<anzahlEingaenge;i++) {
            eingaenge[i] = .....; //wenn es nur einzelne Buchstaben sein sollen geht das leicht
        }
    }


    public String eingangAusgeben(int index) {
        if (index < eingaenge.length) {
            return eingaenge[index];
         
        // Eingang nicht vorhanden
        return null;
    }

somit kannst beim aufruf der methode "eingangAusgeben" guggn ob "null" zurückgegeben wird, wenn ja, dann wurde ein eingang gesucht, der an dem Gatter nicht existiert (index war größer als Anzahl der Elemente im Array).
 

Injen

Mitglied
Hi!

Danke erstmal. Habe gesehen, dass ich noch einen Fehler hatte. Das Array war übrigens oben deklariert, hatte ich blos nicht im Text mit drin, aber gehört dort kein private/oublic sonst was davor?

Der Fehler war:
Code:
public NAND(int anzahlEingaenge) { 
       [color=red]String[][/color] eingaenge = new String[anzahlEingaenge];

Nun wird wie gewünscht ein Signal erzeugt, wenn ich den Eingang des Gatters belegen will. Nun möchte ich aber kontrollweise eine Methode haben, die mir den Namen des Signals am jeweiligen Eingang gibt. Der Kostruktor von Signal verlangt ja einen String, mit dessen Hilfe ich die Signale auseinanderhalte. Ich kann ja aber kein Objekt aus dem Array holen und ausgeben. Ich will ja auch eigentlich nur den namen bzw den String im Objekt haben. Wie realisiert man das?
anfangen sollte das ganze mit:
Code:
public String gebeSignalName (int platz)
{
    ........
}

soweit war ich schon. Aber ich kann ja nun nicht schreiben " X = eingaenge[platz] "
dann würde er ja versuchen das Objekt zu laden was ja nicht geht wenn ich richtig liege.
Hier einfach mal die beiden Klassen:
Code:
import java.util.ArrayList;
/**
 * Write a description of class NAND here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class NAND
{
    // instance variables - replace the example below with your own
    Signal[] eingänge;
    /**
     * Constructor for objects of class NAND
     */
    public NAND(int eingaenge)
    {
        // initialise instance variables
        eingänge = new Signal [eingaenge];
        System.out.println ( eingänge.length );
    }
    
    public void setInput (String signal, int platz)
    {
        eingänge[platz] = new Signal(signal);
    }
    
    public String gebeSignalName (int platz)
    {
        return eingaenge[platz];
    }
    
 

}

Hier macht der Kompiler schon stress wegen der Methode.

Code:
public class Signal
{
    // instance variables - replace the example below with your own
    private String name;

    /**
     * Constructor for objects of class Signal
     */
    public Signal(String name)
    {
        // initialise instance variables 
        this.name = name;
    } 
   
    public String nameGeben()
    {
        return name;
    }
}

Da habe ich versucht eine Mthode zu erstellen, die ich von der Klasse NAND aus hätte aufrufen können. Aber damit die Methode erstmal in "Signal" läuft muss ich ja das mit dem "this....." machen, da er sonst die Variable nicht kennt. Wenn ich das aber tue, dann kann man doch nicht mehr zwischen den objekten unterscheiden oder?

Und noch ein Problem fiel mir auf:
Wenn ich in Signal auch ein Array mache, dann muss ich das ja bereits beim erstellen auf eine bestimmte Anzahl begrenzen. Das ist aber nicht sehr förderlich, da man ja vielleicht einfach mal ein Gatter dazubauen möchte und damit evtl. mehr Signale hat/braucht.


Also ich muss ehrlich gestehen, dass ich es spitzenmäßig finde, dass mir hier so geholfen wird. Ehrlichgesagt habe ich erwartet es passiert garnichts, weils halt zu billig ist und jeder denkt ich würde nicht selber darüber nachdenken.
Soweit schonmal großes DANKE!!!
 

Injen

Mitglied
Moin!

Da nun diggaa1984 sich fast den ganzen Tag damit rumgeschlagen hat mir die Sache beizubringen und das Programm zu schreiben, ist die Aufgabe 1/4 gelöst. Mit dem kleinen Manko, dass sie nur bei ihm gelöst ist.
Nachdem ich dann von BlueJ auf scintilla umgestiegen bin, erleichterte sich das testen des Programms enorm, da ich eine Klasse vorgegeben habe, die die Simulation eines Volladdierers implementiert.

Lange Rede kurzer Sinn:
Das Programm läuft nicht bei mir. Es scheint probleme beim importieren von ArrayList zu geben. Der Compiler gibt mir 2 Fehlermeldungen raus:

Signal.java:9: <identifier> expected
private ArrayList<Nand> gatter;
^
Signal.java:21: '(' or '[' expected
gatter = new ArrayList<Nand>();
^
2 errors

Nun haben wir viel rumgespielt mit den Umgebungsvariablen und dem "CLASSPATH" hat aber alles nichts gebracht. Auch update von Java JDK war wirkungslos.

Nu haben wir keinen Plan mehr wie es weitergehen soll. Fakt ist, dass mein Programm bei ihm läuft und sein Programm bei mir ebenso wenig.

Hoffe jemand kann mir/uns da weiterhelfen.......

MFG MAnuel
 

diggaa1984

Top Contributor
joa also, wir haben ne import anweisung drin in einer klasse à la:

Code:
import java.util.ArrayList;

damit scheint er nicht klar zu kommen, ArrayList wird nicht als gültiger Typ (siehe oben) erkannt. Quasi scheint er das package nich zu finden.

Mein CLASSPATH hat auch keinen Verweis auf nen /lib Ordner (des jdk oder jre) oder dergleichen, weder USER noch GLOBAL-Variante.
 

diggaa1984

Top Contributor
so problem gelöst, wir mussten warum auch immer doch die rt.jar im CLASSPATH mit aufnehmen, wo die java-paketstrutkur drin liegt. Steht bei nix von im CLASSPATH aber so läufts nun
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
C Probleme mit Byte konvertieren nach int Java Basics - Anfänger-Themen 10
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
I Projekte in IDE untereinander sharen / Probleme beim Build Java Basics - Anfänger-Themen 8
MiMa Probleme mit Datentyp long ?? Java Basics - Anfänger-Themen 2
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
Jxhnny.lpz TicTacToe Spiel vs Computer. (Probleme) Java Basics - Anfänger-Themen 7
B Quiz mit RMI Probleme mit RMI start Java Basics - Anfänger-Themen 4
httprt Probleme bei dem erstellen von leveln in meinem Spiel Java Basics - Anfänger-Themen 2
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
V Probleme Guessing Game Java Basics - Anfänger-Themen 8
hebein PDF Ausdruck auf Drucker - Probleme mit Format Java Basics - Anfänger-Themen 17
R JMenu/JMenuItem Probleme Java Basics - Anfänger-Themen 2
B Static vs non static und Probleme daraus Java Basics - Anfänger-Themen 13
J Probleme mit dem Debugger Java Basics - Anfänger-Themen 4
I Probleme mit OutputStream - Datei lässt sich nicht öffnen Java Basics - Anfänger-Themen 4
J Probleme mit Kompilierung Java Basics - Anfänger-Themen 11
B Probleme mit Zugriff auf Dateisystem Windows 10 ( jFileChooser) Java Basics - Anfänger-Themen 17
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
C Probleme mit paintComponent Java Basics - Anfänger-Themen 13
P Probleme mit JUnit-Tests, es kommt was anderes raus als bei manuellen Tests Java Basics - Anfänger-Themen 5
E JavaFX Editor Probleme mit der Zwischenablage Java Basics - Anfänger-Themen 12
C Probleme mit dem Erstellen und Importieren von Packages Java Basics - Anfänger-Themen 6
3 OOP erste Versuche, OOP zu verstehen. Probleme mit gettern und settern Java Basics - Anfänger-Themen 4
R Erste Schritte Probleme bei 2D Spielfeld, mit einzufügender "Person" Java Basics - Anfänger-Themen 5
P Probleme bei der Installation von JavaFX Java Basics - Anfänger-Themen 3
S Mehrere Probleme im Code Java Basics - Anfänger-Themen 7
D Probleme mit JFrame und der Größe Java Basics - Anfänger-Themen 8
Dimax String Probleme Java Basics - Anfänger-Themen 12
N Probleme beim printen von Arrays durch for Schleife Java Basics - Anfänger-Themen 3
Splayfer Java Array Probleme Java Basics - Anfänger-Themen 3
J Probleme bei IllegalArgumentException "werfen". Java Basics - Anfänger-Themen 1
K Probleme bei der Ausgabe - komme nicht weiter :/ Java Basics - Anfänger-Themen 15
X Probleme im Umgang mit PriorityQueue Java Basics - Anfänger-Themen 75
D Probleme mit dem Windowbuilder und JComboBox Java Basics - Anfänger-Themen 2
M Regex Probleme (mal wieder) Java Basics - Anfänger-Themen 3
tom.j85 TicTacToe - probleme beim Casten Java Basics - Anfänger-Themen 6
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
X Probleme mit Übungsaufgaben zu Zahlentypen Java Basics - Anfänger-Themen 4
G Probleme bei Aufgabe Java Basics - Anfänger-Themen 12
P Erste Schritte Probleme mit dem Programmieren Java Basics - Anfänger-Themen 12
B Probleme bei einer Aufgabe Java Basics - Anfänger-Themen 19
Franzi1001 Probleme mit Eclipse Java Basics - Anfänger-Themen 7
T Probleme bei Installation von JDK Java Basics - Anfänger-Themen 2
C Probleme mit String-Vergleich Java Basics - Anfänger-Themen 4
C Probleme bei Regex Java Basics - Anfänger-Themen 9
V Probleme mit Arrays Java Basics - Anfänger-Themen 8
D Kleine Probleme mit Split-Befehlen Java Basics - Anfänger-Themen 5
T Probleme mit Strings Java Basics - Anfänger-Themen 6
G Probleme bei Frame aufgaben Java Basics - Anfänger-Themen 6
N Probleme mit dem ActionListener Java Basics - Anfänger-Themen 4
D Probleme beim Kompelieren mache ich etwas falsch ? Java Basics - Anfänger-Themen 3
L Probleme mit Java Java Basics - Anfänger-Themen 3
S Probleme mit abspielen einer .wav Datei Java Basics - Anfänger-Themen 2
J Probleme bei der Umwandlung einer Farbe von Hex zu RGB Java Basics - Anfänger-Themen 8
K Probleme beim Programm schreiben - Lesen von Dateiinhalten -zaehlen von Wörtern/ Buchstaben Java Basics - Anfänger-Themen 4
M Probleme beim aktualisieren eines JPanels Java Basics - Anfänger-Themen 7
J Probleme beim Array ausgeben Java Basics - Anfänger-Themen 4
M Probleme bei rekursiver Zuordnung Java Basics - Anfänger-Themen 1
I Probleme mit 2 dimensionale Arrays Java Basics - Anfänger-Themen 3
H Best Practice View probleme Java Basics - Anfänger-Themen 2
B Probleme mit Kreisberechnung Java Basics - Anfänger-Themen 15
E Probleme mit Scanner Java Basics - Anfänger-Themen 4
J Eclipse Export Probleme Java Basics - Anfänger-Themen 25
M Probleme beim verwenden von Packages Java Basics - Anfänger-Themen 6
D Probleme mit der Übergabe einer BorderPane Java Basics - Anfänger-Themen 2
J Interface Probleme bei der Implementierung Java Basics - Anfänger-Themen 1
BlueFox Tabelle in der Konsole ausgeben - Probleme Java Basics - Anfänger-Themen 1
G Methoden Probleme beim Methodenaufruf Java Basics - Anfänger-Themen 2
V Klassen ObjectInputStream ->ReadObject Probleme Java Basics - Anfänger-Themen 5
P Probleme mit der Do-Schleife Java Basics - Anfänger-Themen 2
F Erste Schritte Compiling Probleme Java Basics - Anfänger-Themen 13
S Neuling und Probleme bei Schulaufgabe Java Basics - Anfänger-Themen 5
J Anfänger: ActionListener und ProcessBuilder machen Probleme Java Basics - Anfänger-Themen 6
S Erste Schritte 2D Grafik Probleme mit KeyListener. Java Basics - Anfänger-Themen 18
M Array mit eigenem Datentyp probleme beim übergeben Java Basics - Anfänger-Themen 6
M Probleme mit Eclipse Java Basics - Anfänger-Themen 20
G Probleme beim casten von double zu int Java Basics - Anfänger-Themen 3
E 2 Probleme - Datum & private finale Variablen Java Basics - Anfänger-Themen 5
S Compiler-Fehler javac hat Probleme mit Paketen unter OSX Java Basics - Anfänger-Themen 2
J Probleme beim schreiben von Dateien Java Basics - Anfänger-Themen 5
B Variablen Probleme mit Eclipse Java Basics - Anfänger-Themen 6
H Mouse- und KeyListener Probleme? Java Basics - Anfänger-Themen 5
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
I Probleme bei Verzeichnissanalyse Java Basics - Anfänger-Themen 12
F Probleme mit privaten Klassen (abstrakten Klassen) Java Basics - Anfänger-Themen 1
H Probleme mit Klassen...oder: Eine Uhr Java Basics - Anfänger-Themen 9
G Probleme mit Konsole Java Basics - Anfänger-Themen 4
S Probleme mit GamGrid Spiel-Erstellung => Actor reagiert nicht auf Tastatur Java Basics - Anfänger-Themen 2
G Probleme mit Eclipse oder der URL Klasse Java Basics - Anfänger-Themen 5
W Verständnis Probleme bei der while-Schleife und continue Java Basics - Anfänger-Themen 21
M Probleme mit Anzeigen von String in GUI und if-Anweisung Java Basics - Anfänger-Themen 9
T Konstruktor Probleme Java Basics - Anfänger-Themen 3
W Methoden Probleme mit der Scanner Methode Java Basics - Anfänger-Themen 2
F Ja Nein Abfrage und andere Probleme Java Basics - Anfänger-Themen 5
L If Anweisung mit ArrayList Probleme Java Basics - Anfänger-Themen 6
littles_de Simbad Simulator probleme mit Sensordaten... Java Basics - Anfänger-Themen 0
M Erste Schritte Probleme beim Verknüpfen von Methoden Java Basics - Anfänger-Themen 15
A Probleme beim Methodenaufruf von Object[] ! Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben