![]() |
|
|
|||||||
| Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern |
|
|
|
Themen-Optionen | Thema durchsuchen | Ansicht |
| #1 (permalink) | |
|
Neuer Benutzer
Bit
Registriert seit: 14.06.2008
Fachbeiträge: 4
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
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
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 |
|
|
| #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. |
|
|
| #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
|
| #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 ];
}
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 |
|
|
| #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 ];
}
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;
}
__________________
Wer aufhört, besser zu werden, hat aufgehört, gut zu sein. (Philip Rosenthal) |
|
|
| #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];
anfangen sollte das ganze mit: Code:
public String gebeSignalName (int 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];
}
}
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;
}
}
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!!! |
|
|
| #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 |
|
|
| #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; 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) |
|
|
| #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) |
|
|
|
| Themen-Optionen | Thema durchsuchen |
| 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 |
|
|