Hallo leute,
Ich hab dar ein Problem beim programmieren eines Voll und Halb Addierers.
vielleicht könntet ihr ja mir helfen;
Das program hat 4 Klassen,
Klasse Bit:
/**
* Die Klasse Bit repraesentiert eine Binaerziffer.
*/
class Bit {
// Binaerziffer
boolean b;
/**
* Erzeugt Bitobjekt und initialisiert Binaerziffer mit Wert 0 (false).
*/
Bit() {
this.b = false;
}
/**
* Erzeugt Bitobjekt und initialisiert Binaerziffer mit uebergebenen Wert.
*/
Bit(boolean {
this.b = b;
}
/**
* Erzeugt Bitobjekt und initialisiert Binaerziffer mit uebergebenen Wert.
* Der uebergebene int-Wert muss entweder 0 oder 1 sein. Die Binaerziffer
* wird mit false initialisiert, genau dann, wenn n = 0.
*/
Bit(int n) {
if(n == 0) {
this.b = false;
} else {
this.b = true;
}
}
/**
* Liefert true genau dann zurueck, wenn dieses Bit gesetzt (= 1, true) ist.
*/
boolean isSet() {
return b;
}
/**
* Liefert 1 zurueck, wenn dieses Bit gesetzt ist und andernfalls 0.
*/
int getValue() {
if( {
return 1;
} else {
return 0;
}
}
}[/code]
Halb Addierer:
[code]/**
* Die Klasse HalfAdder implementiert einen Halbaddierer.
*/
class HalfAdder {
// Uebertrag
Bit carry;
/**
* Erzeugt neuen Halbaddierer mit Uebertrag 0.
*/
HalfAdder() {
this.carry = new Bit();
}
/**
* Liefert die Summe der uebergebenen Bits zurueck. Der Uebertrag der
* Addition wird im Attribut carry gespeichert.
*/
Bit add(Bit x, Bit y) {
if (x==new Bit(1) && y == new Bit(1)){
this.carry= new Bit(1);
}
else{
this.carry= new Bit(0);
}
if ((x == new Bit(1) && y == new Bit(1)) || (x == new Bit(0) && y == new Bit(0))){
return (new Bit(0));
}
else {return (new Bit(1));}
}
/**
* Liefert den Uebertrag zurueck.
*/
Bit getCarry() {
return this.carry;
}
}
Voll Addierer:
/**
* Die Klasse FullAdder implementiert einen Volladdierer.
*/
class FullAdder {
// Uebertrag
Bit carry;
// Halbaddierer.
HalfAdder ha1;
HalfAdder ha2;
/**
* Erzeugt neuen Volladdierer mir Uebertrag 0 und zwei Halbaddierern.
*/
FullAdder() {
this.carry = new Bit();
this.ha1 = new HalfAdder();
this.ha2 = new HalfAdder();
}
/**
* Liefert die Summe der uebergebenen Bits zurueck. Der Uebertrag der
* Addition wird im Attribut carry gespeichert.
*/
Bit add(Bit x, Bit y, Bit c_in) {
Bit add = this.ha1.add(x, y);
c_in=ha1.getCarry();
x= add;
y= c_in;
Bit add1 = this.ha2.add(x, y);
this.carry =ha2.getCarry();
return add1;
}
/**
* Liefert den Uebertrag zurueck.
*/
Bit getCarry() {
return this.carry;
}
}
TestKlasse:
/**
* Die Klasse TestAdder implementiert einen Test fuer die Klasse FullAdder. #
* Die Addition des Volladdieres wird fuer alle 8 moeglichen Eingabekombi-
* nationen x, y, c getestet. Die Wertetabelle wird im Format
*
* x y c z cout
*
* ausgegeben. Dabei ist z die Summe der Addtion und cout der Uebertrag.
*/
class TestAdder {
// Eingabewerte x, y, c
static int[][] x = {
{0, 0, 0},
{0, 0, 1},
{0, 1, 0},
{0, 1, 1},
{1, 0, 0},
{1, 0, 1},
{1, 1, 0},
{1, 1, 1},
};
public static void main(String[] args) {
FullAdder fa = new FullAdder();
Bit[] val = new Bit[5];
System.out.println("x y c z cout");
for(int k = 0; k < 8; k++) {
for(int i = 0; i < 3; i++) {
val[i] = new Bit(x[k][i]);
}
val[3] = fa.add(val[0], val[1], val[2]);
val[4] = fa.getCarry();
for(int i = 0; i < 5; i++) {
System.out.print(val[i].getValue() + " ");
}
System.out.println();
}
}
}
Der Fehler ist dass bei der Ausgabe cout für jeden fall 0 ist und Die summe für jeden fall 1 ist
Konsole ausgabe:
init:
deps-jar:
Compiling 1 source file to /home/cihan/NetBeansProjects/Addierer/build/classes
compile:
run:
x y c z cout
0 0 0 1 0
0 0 1 1 0
0 1 0 1 0
0 1 1 1 0
1 0 0 1 0
1 0 1 1 0
1 1 0 1 0
1 1 1 1 0
BUILD SUCCESSFUL (total time: 0 seconds)
Ich danke schon jetzt auf jede antwort.