java-forum.org - Java programmieren aus Leidenschaft
Java 6 Einstieg und professioneller Einsatz
Alter Preis: 34,90 EUR
Jetzt: 0,00 EUR

zzgl. Versandkosten

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Java Basics - Anfänger-Themen

Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern

Thema geschlossen    
Themen-Optionen Thema durchsuchen Ansicht
Alt 14.06.2008, 22:04   #1 (permalink)
Neuer Benutzer
Bit
 
Registriert seit: 14.06.2008
Fachbeiträge: 4
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard Probleme bei der Abstraktion der realen Welt

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 ******beschreibung zum programmieren mit Java. Leider nichtmal unsere Bibliothek.


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

Manuel
Injen ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 15.06.2008, 00:20   #2 (permalink)
Stammbenutzer
Floppy Disc
 
Registriert seit: 09.01.2004
Fachbeiträge: 980
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
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/openb...20fae0a5f5bd3f), 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
__________________
Mach dir keine Sorgen wegen der Computer – sollten sie allzu mächtig werden, laß sie einfach einen Ausschuß bilden und Konferenzen abhalten.
Campino ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 15.06.2008, 09:47   #3 (permalink)
Nicht angemeldet
 
Fachbeiträge: n/a
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
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 15.06.2008, 11:28   #4 (permalink)
Neuer Benutzer
Bit
Themenstarter
 
Registriert seit: 14.06.2008
Fachbeiträge: 4
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
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
Injen ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 15.06.2008, 12:05   #5 (permalink)
Stammbenutzer
Megabyte
 
Registriert seit: 01.05.2008
Fachbeiträge: 2.009
Abgegebene Danke: 8
Erhielt 123 Danke für 122 Beiträge
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).
__________________
Wer aufhört, besser zu werden, hat aufgehört, gut zu sein. (Philip Rosenthal)
diggaa1984 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 15.06.2008, 13:21   #6 (permalink)
Neuer Benutzer
Bit
Themenstarter
 
Registriert seit: 14.06.2008
Fachbeiträge: 4
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
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 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 15.06.2008, 23:26   #7 (permalink)
Neuer Benutzer
Bit
Themenstarter
 
Registriert seit: 14.06.2008
Fachbeiträge: 4
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
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
Injen ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 16.06.2008, 09:54   #8 (permalink)
Stammbenutzer
Megabyte
 
Registriert seit: 01.05.2008
Fachbeiträge: 2.009
Abgegebene Danke: 8
Erhielt 123 Danke für 122 Beiträge
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.
__________________
Wer aufhört, besser zu werden, hat aufgehört, gut zu sein. (Philip Rosenthal)
diggaa1984 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 16.06.2008, 11:36   #9 (permalink)
Stammbenutzer
Megabyte
 
Registriert seit: 01.05.2008
Fachbeiträge: 2.009
Abgegebene Danke: 8
Erhielt 123 Danke für 122 Beiträge
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
__________________
Wer aufhört, besser zu werden, hat aufgehört, gut zu sein. (Philip Rosenthal)
diggaa1984 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Thema geschlossen    

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
3D Welt und Eingabe Drake Spiele- und Multimedia-Programmierung 5 17.05.2008 15:19
Abstraktion vs. Spezialisierung tas Java Basics - Anfänger-Themen 4 21.02.2008 19:27
hallo welt als .jar 5etH Java Basics - Anfänger-Themen 16 13.11.2007 16:08
Hallo Welt Java Basics - Anfänger-Themen 10 01.09.2006 11:43
Die inheränte Abstraktion der komplexen Kontradiktion Beni Plauderecke 23 25.04.2005 17:02


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:50 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de