Frage von Mariposaa94, 93

wie kann ich ein Java Program erzeugen, das Binärzahlen beliebiger Länge addiert?

Hi.

Ich habe versucht, den Code erst mal so zu erzeugen, dass Binärzahlen addiert werden. Aber das Ergebnis kann ich nur als Dezimalzahlen ausgeben. Aber ich will ja, dass das Ergebnis wieder als Binärzahl rauskommt. Und das mit der beliebigen Länge bekomme ich auch nicht hin, kann mir das jmnd vlt weiterhelfen, wäre sehr nett! :)

Liebe Grüße,

Mariposa.

Antwort
von PWolff, 70

Eine Klasse, die so was leistet, nennt sich BigInteger oder BigInt.

Dazu findest du mehr als genug Informationen im Internet, auch wie man so etwas implementieren kann.

Oder musst du tatsächlich jedes Bit einzeln gespeichert haben, womöglich noch als char?

Und wieso kannst du das Ergebnis nur als Dezimalzahl ausgeben?

Für die beliebige Länge: Kennst du die (generische) Klasse List? Kannst du Ausnahmen abfangen?

Kommentar von TeeTier ,

Merke: Während dem Tippen einer Antwort nicht zwischendurch Abendbrot essen, sonst kommt einem jemand anderes zuvor und schickt seine Antwort 18 Minuten schneller ab. :)

Kommentar von PWolff ,

Kenne ich auch. Auch, dass der Hund einem so lange den Mausarm anstupst und auf die Tastatur zu treten droht, bis man mit ihm spazierengeht. (Das Biest hat inzwischen auch den Ausschaltknopf meines Laptops gefunden.)

Kommentar von Azasel ,

XD

Kommentar von Mariposaa94 ,

Hallo, danke erst mal für deine Hilfsbereitschaft :) .. Also beliebig lang heißt anscheinend unendlich lange Binärzahlen. Ich habe es mit char versucht, aber nicht hinbekommen .. denke grad an eine Funktion mit String. Könnte man damit was machen?

Kommentar von PWolff ,

Dafür gibt es ja die Klasse (genauer: das Klassentemplate) List<T>, wo man leicht neue Elemente hinzufügen und Elemente entfernen kann.

Soweit ich weiß, ist ein string in Java ebenso wie in C# und C++ ein
char[] oder verhält sich wie ein schreibgeschütztes char[]. Das würde also dem Programmierer gegenüber List<char> bzw. List<int> ein ganz klein wenig Arbeit abnehmen und dem Computer wesentlich mehr Arbeit machen. Aber möglich wäre es.

Antwort
von Reyha24, 51

Beliebige Länge wird man nicht hinbekommen. Dabei gibt es, wegen dem Hauptspeicher, eine obere Grenze. Wie lang sollen die Bitstrings ungefähr werden können? Größenordnung ist hier gefragt. Gruß :)

Kommentar von Mariposaa94 ,

die Aufgabenstellung sagt beliebig lang. Ich denke es heißt einfach unendlich viel? Habe da an "char" gedacht, denkst du damit könnte man in die richtige Richtung gehen?

Kommentar von Reyha24 ,

Beliebig lang ist natürlich unmöglich. Denke es werden keine xx Millionen sein, also würde ich eine Array von chars verwalten, worauf du dann die Addition durchführst. Dabei den, im Zweifelsfall, größeren Bitstring in das Array packen und schließlich Bit für Bit addieren und das Ergebnis wieder in dem Array speichern. Gruß :)

Kommentar von Reyha24 ,

Wobei lieber List

als ein Array verwenden :) Muss ja dynamisch sein, hatte das verplant :P

Kommentar von PWolff ,

"Beliebig lang" heißt bei endlichen (insbesondere realen) Systemen "solange der Speicherplatz ausreicht".

Auf Verdacht 6 GB für ein paar Strings zu reservieren wäre maßlos übertrieben.

Kommentar von Reyha24 ,

Kann man ohne nachzufragen so nicht sagen.

Antwort
von TeeTier, 48

Etwa so:

import java.math.BigInteger;

// ,,,

String str = "10110 10 1000010100110 111010 1 0 101";

String[] parts = str.trim().split("\\s+");
BigInteger sum = BigInteger.ZERO;

for (String part : parts) {
System.out.printf("+%30s\n", part);

sum = sum.add(new BigInteger(part, 2));
}

System.out.printf("\n=%30s\n", sum.toString(2));

Damit solltest du zurecht kommen. :)

Kommentar von TeeTier ,

PS: Anstatt die Breite fix mit 30 anzugeben, kannst du auch erst mal die Summe berechnen, deren Breite in String-Form auslesen, und dieses Ergebnis dann für die Ausrichtung benutzen.

Die "30" habe ich jetzt nur genommen, weil mir nicht ganz klar war, was du genau unter "beliebig" verstehst. :)

Kommentar von Mariposaa94 ,

vielen Dank! Beliebige Länge soll heißen, dass es unendlich lange Binärzahlen speichern kann. du hast ja //,,, was soll ich denn da eintragen? bin nicht so gut in programmieren.. 

Kommentar von Mariposaa94 ,

Hi hab jetzt dein Code mal ausprobiert, also wenn man die Main Methode etc. hinzufügt, kommt leider ein falsches Ergebnis raus. 

Kommentar von TeeTier ,

Mein Code arbeitet korrekt. Du hast vermutlich an anderer Stelle einen Fehler eingebaut. :)

Kommentar von Mariposaa94 ,

Jab! Du hast Recht! Hat geklappt vielen lieben Dank!

Keine passende Antwort gefunden?

Fragen Sie die Community