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.
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. :)
Jab! Du hast Recht! Hat geklappt vielen lieben Dank!
Mein Code arbeitet korrekt. Du hast vermutlich an anderer Stelle einen Fehler eingebaut. :)
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..
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. :)
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?
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. :)
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?
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.
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ß :)
"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.
Wobei lieber List
als ein Array verwenden :) Muss ja dynamisch sein, hatte das verplant :P
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ß :)
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?
Hi hab jetzt dein Code mal ausprobiert, also wenn man die Main Methode etc. hinzufügt, kommt leider ein falsches Ergebnis raus.