Schleifen

chocobo

Mitglied
Hallo Programmierfreunde, als absoluter Neuerling versuche ich mich in der Java Welt zurecht zu finden. Da ich nicht weiter weiß befrage ich hier die Profis.

Ich suche hier keine fertigen Lösungen, sondern lediglich Bearbeitungshinweise bzw. Erläuterungen. Denn ich will ja was lernen.

Also ich habe zwei Klassen, die sehen so aus:

public class DualZahl {

private byte[] dZahl8 = new byte[8];

public void DualZahl() {
for (int i = 0; i < dZahl8.length; i++)
dZahl8 = 0;
}

public void setZahl(byte[] zahl1) {

for (int i = 0; i < zahl1.length; i++) {

dZahl8 = zahl1;
}
}

public void add(byte[] zahl2) {

for (int i = 0; i < dZahl8.length; i++) {
dZahl8 += zahl2;
System.out.print(dZahl8);
}

}

public byte[] getZahl() {

return dZahl8;
}
}
----------------------------------------------------------------------------------------------------//2. Klasse:


public class DualzahlenArithmetik {

public DualzahlenArithmetik() {
// TODO Auto-generated constructor stub
}

public static void main(String[] args) {
byte[] zahl1 = { 0, 0, 0, 1, 1, 1, 1, 1};
byte[] zahl2 = { 0, 1, 0, 1, 1, 1, 0, 1};
byte[] zahl3 = new byte[8];
DualZahl dZahl1 = new DualZahl();
dZahl1.setZahl(zahl1);
dZahl1.add(zahl2);
zahl3 = dZahl1.getZahl();
System.out.print("Ergebnis: ");
for (int i = 0; i < zahl3.length; i++)
System.out.print(zahl3);


}
}
----------------------------------------------------------------------------------------------------
P.S: mit Sicherheit werden Dualzahlen so nicht miteinander addiert. Ich versuche gerade erst mal zu verstehen was ich da bis hierhin programmiert habe.

Meine Frage:

Warum bekomme ich in der Addition: dZahl8 += zahl2;
01022212 als Ergebnis und nicht 00122212?

Vielen Dank für eure Antworten.

Beste Grüße

Tobias
 
Ich hatte die Dualzahl falsch eingetippt und war dadurch verwirrt. Vielen Dank.

Ich lasse diesen Thread weiter offen, falls ich später noch weitere Fragen hätte.
 
Bitte den Code in Code-Tabs setzen [code=Java]Dein Code[/code]
Ich versuche gerade erst mal zu verstehen was ich da bis hierhin programmiert habe
Ich würde mich eher darauf konzentrieren, was man habe am Anfang programmieren wollen.
Java:
public class DualZahl {

     private byte[] dZahl8 = new byte[8];

     /** Hier wird im Konstruktor mittels einer for-Schleife soviel mal Array stellen hat, dem Array als
           Ganzes eine Zahl Null zuzuweisen
           Das kann nicht funktionieren */
     public void DualZahl() {
         for (int i = 0; i < dZahl8.length; i++)
        dZahl8 = 0;
     }

    /** Hier wird mittels for-Schleife versucht, soviel mal Array zahl1 stellen hat, einem Array Names dZahl8
          wiederum als Ganzes ein Array zahl1 als Ganzes zuzuweisen
         Das kann nicht gehen */
     public void setZahl(byte[] zahl1) {
         for (int i = 0; i < zahl1.length; i++) {
        dZahl8 = zahl1;
        }
     }

    /** Das Selbe in Grün mit einer System-Ausgabe */
     public void add(byte[] zahl2) {
        for (int i = 0; i < dZahl8.length; i++) {
        dZahl8 += zahl2;
        System.out.print(dZahl8);
        }
    }

   public byte[] getZahl() {
       return dZahl8;
   }
}

Java ist auch eine Insel : Arrays
Besser jedoch, von Anfang an!

Zum Thema als Pseudo-Code:
Java:
public void setzeEineBananenKiste(Bananenkiste kiste)
{
     meine.bananenkiste = kiste;
}

public boolean hatEineSolcheBanane(Banane banane)
{
    for(Banane b : bananenkiste)
    {
         if(b == banane)
        {
             return true;
        }
    }
    return false;
}
 
Ist das byte-Array eigentlich vorgegeben oder kann es auch ein boolean-Array sein? Persönlich würde ich bei der Implementierung ja zu Letzterem tendieren
 
huch. Ihr seid ja schnell. Ich bin da noch weiter am ausprobieren. Die beiden Arrays sind in der einen Klasse vorgegeben, ja.

Als Übungsaufgabe habe ich folgendes:
Es soll eine Klasse entwickelt werden, die eine Dualzahl mit 8 Bit verwaltet und Methoden für Rechenoperationen
mit 8-stelligen Dualzahlen bereitstellt. Die Klasse soll wie folgt aussehen (UML-Notation):
Die Klasse enthält das geschützte Attribut dZahl8 vom Array-Typ byte[8]. Sie stellt folgende Methoden bereit:

DualZahl( ): Leerkonstruktor, füllt dZahl8 mit Nullen.

add (zahl: byte[8]): bitweise Addition einer als Parameter übergebenen Dualzahl auf dZahl8.
setZahl(zahl: byte[8]): Setzen (Überschreiben) von dZahl8 mit der übergebenen Dualzahl.

byte[8] getZahl(): Auslesen und Rückgabe von dZahl8 als byte[8].
Die Klasse DualZahl wird durch folgendes Programm benutzt. Stellen Sie sicher,
dass das Programm nach Einbinden Ihrer Klasse syntaktisch und logisch stimmig ist.
DualZahl
- dZahl8: byte[8]
+ DualZahl( )
+ add (zahl: byte[8]): void
+ setZahl(zahl: byte[8]): void
+ getZahl(): byte[8]
---------------------------------------------------------------------------------------------------------------
P.S.: bitte den Code nicht weiter großartig beachten. Bin noch dabei mich da reinzufinden. Vielen Dank
 
Sodele....Auf die Gefahr hin, dass mich die eingefleischte Java-Gemeinde hier im Forum mich vom Hof jagen möchte. 🙂

Der Code ist sicherlich nicht die beste Lösung aber ich denke, dass er funktioniert.

Der ist zwar ziemlich umständlich geschrieben, aber vielleicht gibt es hier einen Fehler den ich völlig übersehen habe. Habe verschiedene Dualzahlen durchgejagt, die einzige Exception wirft er nur aus, wenn alle Stellen dZahl8[0] bis dZahl8[7] eine 1 haben.

Vielen Dank. Beste Grüße
Java:
public class DualZahl {

   private byte[] dZahl8 = new byte[8];

   public void DualZahl() {
       for (int i = 0; i < dZahl8.length; i++)
           dZahl8[i] = 0;
   }

   public void setZahl(byte[] zahl1) {

       for (int i = 0; i < zahl1.length; i++) {

           dZahl8[i] = zahl1[i];

           // System.out.print(dZahl8[i]); 00010101
       }
   }

   public void add(byte[] zahl2) {

       for (int i = 0; i < dZahl8.length; i++) {
           dZahl8[i] += zahl2[i]; // + Zahl2 10111000
           // System.out.print(dZahl8[i]); // neue dzahl8 00010101 = 10121101
           // + 10111000
           if (zahl2[i] == 1 && dZahl8[i] == 2) {

               dZahl8[i] = 0;
               dZahl8[i - 1] += 1;

           }
       }

       for (int i = 0; i < dZahl8.length; i++) {

           // System.out.print(dZahl8[i]); // neue dzahl8= 10201101

           if (zahl2[i] == 1 && dZahl8[i] == 2) {

               dZahl8[i] = 0;
               dZahl8[i - 1] += 1;

               // System.out.print(dZahl8[i]); // neue dzahl8= 11001101
           }
       }

       for (int i = 0; i < dZahl8.length; i++) {

           // System.out.print(dZahl8[i]); // neue dzahl8= 10201101

           if (zahl2[i] == 1 && dZahl8[i] == 2) {

               dZahl8[i] = 0;
               dZahl8[i - 1] += 1;

               // System.out.print(dZahl8[i]); // falls Übertrag auf dZahl8[0] erfolgt.
           }
       }
   }

   public byte[] getZahl() {

       return dZahl8;
   }
}
 
Hier ist vollständigkeitshalber die andere Klasse. Cheers

Java:
public class DualzahlenArithmetik {

   public DualzahlenArithmetik() {
       // TODO Auto-generated constructor stub
   }

   public static void main(String[] args) {
       byte[] zahl1 = {0,0,0,0,1,1,0,0};
       byte[] zahl2 = {0,0,0,0,1,1,0,1};
       byte[] zahl3 = new byte[8];
       DualZahl dZahl1 = new DualZahl();
       dZahl1.setZahl(zahl1);
       dZahl1.add(zahl2);
       zahl3 = dZahl1.getZahl();
       System.out.print("Ergebnis: ");
       for (int i = 0; i < zahl3.length; i++)
       System.out.print(zahl3[i]);
      

}
}
 
Zuletzt bearbeitet:
@chocobo dZahl8 == 2 würde ich Dir als Fehler anrechnen. In der Aufgabe steht, dass das Arrays Bits verwalten soll. Ein Bit hat zwei verschiedene Zustände, Dein Array hätte dagegen drei: 0, 1, 2

Abgesehen davon machst Du Dir die Sache unnötig schwer. Schau Dir mal die Wertetabelle für die Addition zweier Bits an:
Code:
Bit Summand 1: 0 1 0 1         
Bit Summand 2: 0 0 1 1
----------------------
Ergebnis:      0 1 1 0
Übertrag:      0 0 0 1

Jetzt überlegst Du Dir einfach noch, was mit dem Übertrag passieren muss...
 

Neue Themen


Zurück
Oben