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

3 Antworten

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. :)


TeeTier  22.02.2016, 00:14

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. :)

0
Mariposaa94 
Fragesteller
 22.02.2016, 10:32

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.. 

0
Mariposaa94 
Fragesteller
 22.02.2016, 11:12

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

0
TeeTier  22.02.2016, 11:53
@Mariposaa94

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

0
Mariposaa94 
Fragesteller
 22.02.2016, 15:14

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

1

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?


TeeTier  22.02.2016, 00:10

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. :)

1
PWolff  22.02.2016, 01:02
@TeeTier

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.)

2
Azasel  22.02.2016, 06:34

XD

0
Mariposaa94 
Fragesteller
 22.02.2016, 10:36

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?

0
PWolff  22.02.2016, 14:46
@Mariposaa94

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.

0

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ß :)


Mariposaa94 
Fragesteller
 22.02.2016, 10:33

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?

0
Reyha24  22.02.2016, 11:42

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ß :)

0
Reyha24  22.02.2016, 11:44

Wobei lieber List

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

0
PWolff  22.02.2016, 14:47

"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.

0
Reyha24  23.02.2016, 00:52

Kann man ohne nachzufragen so nicht sagen.

0