Binär -> Dezimal

M

Mr. Jack Herer

Gast
Guten Abend,

Ich soll für die Uni ein Programm schreiben, das eine Binärzahl einliest, diese in eine Dezimalzahl umrechnet und ausgibt.
Mir ist klar dass ich das auch über einen einzigen einfachen Befehl erreichen kann, aber Ziel der Übung ist den Vorgang "per Hand" durchzuführen. Mein Ansatz sieht so aus:
[JAVA=42]import java.util.Scanner;

public class Binaer {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

System.out.println("Geben sie eine Binaerzahl ein, um diese in eine Dezimalzahl umrechnen zu lassen: \n");



String bin = scanner.next();
int laenge = bin.length();
int binInt = Integer.parseInt( bin );
double sum = 0;


switch (binInt){
case 1:
case 0: for (int n = 0 ; +laenge <= n ; n++){

if ((int)bin.charAt(0+n) == '0')
sum = sum + 0;
else
sum = sum + Math.pow(2, +laenge+ - +n); }

System.out.println("Binaerzahl: " +bin+ "\nAls Dezimalzahl: " + sum);


default:
System.out.println("Eine Binaerzahl besteht nur aus 0 und 1!");
}
}
}
[/code]


Allerdings gibt er mir hier nur die Binärzahl aus und für die Dezimalzahl immer den Wert 0.
Was mache ich falsch? Ich habe schon gegoogelt und das Forum durchsucht, wollte aber auch keine einfach Copy&Paste Antwort, sondern wissen wieso mein Code nicht funktioniert.-
Vielen Dank schonmal für alle hilfreichen Antworten!

Grüße
Michael
 

eRaaaa

Top Contributor
Allerdings gibt er mir hier nur die Binärzahl aus und für die Dezimalzahl immer den Wert 0.

Ich hätte eher gesagt es kommt wohl eher immer " System.out.println("Eine Binaerzahl besteht nur aus 0 und 1!");"
Denn wenn ich eine Binärzahl eingebe(die nicht 0 oder 1 ist) trifft natürlich nie das switch bei case 1 oder 0 zu :)
String bin = 1001;
int binInt = 1001 --> != 0 oder 1

Überdenke das vllt. erstmal!
 
M

Mr. Jack Herer

Gast
Ah verdammt das Switch habe ich noch nachträglich kurz vor dem Erstellen des Threads eingefügt.
Bitte lass das einfach außen vor!
Der eigentliche Code besteht nur aus:
[JAVA=42]import java.util.Scanner;

public class Binaer {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

System.out.println("Geben sie eine Binaerzahl ein, um diese in eine Dezimalzahl umrechnen zu lassen: \n");



String bin = scanner.next();
int laenge = bin.length();
int binInt = Integer.parseInt( bin );
double sum = 0;


for (int n = 0 ; +laenge <= n ; n++){

if ((int)bin.charAt(0+n) == '0')
sum = sum + 0;
else
sum = sum + Math.pow(2, +laenge+ - +n); }

System.out.println("Binaerzahl: " +bin+ "\nAls Dezimalzahl: " + sum);

}
}
}
[/code]
 

eRaaaa

Top Contributor
Code:
for (int n = 0 ; +[B]laenge <= n[/B] ; n++){

deine Schleife wird erst gar nicht ausgeführt !
 
M

Mr. Jack Herer

Gast
Ja das ist mir auch klar ^^ Als Wert für die summe kommt immer noch der Anfangswert raus (0.0) deswegen habe ich schon vermutet ,dass die Schleife nie gestartet wird, aber wieso ist das so?
 

eRaaaa

Top Contributor
Der Rumpf wird nur ausgeführt wenn die Bedingung wahr ist, was sie bei dir wohl nicht ist
n = 0 und laenge ist ja vermutlich wohl > 0 , demnach ist die Bedingung laenge <= n = false ! :)
 
M

Mr. Jack Herer

Gast
Merce für die Hilfe! Habe das mit der Schleife erst jetzt richtig verstanden... dachte er führt die solange aus, bis die Länge der eingegebenen Zahl den Wert von n erreicht hat...
Aber jetzt ergibt das ganze wesentlich mehr Sinn!
Der Code funktioniert jetzt nach ein paar kleineren Abänderungen auch entlich!
Java:
import java.util.Scanner;

public class Binaer {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		System.out.println("Geben sie eine Binaerzahl ein, um diese in eine Dezimalzahl umrechnen zu lassen: \n");
		
		

		String bin = scanner.next();
		int laenge = bin.length();
		double sum = 0;
		char [] ziffer = bin.toCharArray();
		
		
      for (int n = 0 ; +laenge > n ; n++){
    	
				 if (ziffer[n] == '0')
					 sum = sum + 0;
				 else
				     sum = sum + Math.pow(2, laenge-1 -n); }

		  System.out.println("Binaerzahl: " +bin+ "\nAls Dezimalzahl: " + sum);
		  

	  
	 }

	}

Danke nochmal für den Hinweis :)
schönen Abend noch.
 

Landei

Top Contributor
Du brauchst keine starken Geschütze wie Math.pow
Java:
int sum = 0;
char [] ziffer = bin.toCharArray();
for(char c : ziffer) {
   sum = 2 * sum + (c - '0'); 
}
 

Andi_CH

Top Contributor
Java:
for (int n = 0 ; +laenge > n ; n++){
...
}

+laenge ???:L

Äh, das bewirkt doch nichts? (Ist eigentlich nur eine Frage ob ich es richtig verstanden habe :) )

spannend ist auch
Java:
sum = sum + 0;
aber das ist ja wohl selbsterklärend :D

und dass die Konversion der "Binär"zahl 123 als Resultat 7.0 gibt ist auch sehr unschön
 
Zuletzt bearbeitet:
M

Mr. Jack Herer

Gast
@Andi_CH:
naja das + vor laenge hätt ich mir sparen können, da hast du recht ;)
Aber das [Java]sum = sum + 0[/Java] brauch ich doch um zu beschreiben was er für den Fall machen soll, dass an der Stelle der Binärzahl eine '0' steht. Oder hätte [Java]sum = sum [/Java] auch gereicht?
Für den Fall dass man etwas anderes als 1 und 0 eingibt, hab ich noch hinzugefügt:

[Java]for (int i=0;i < laenge; i++){
if (ziffer != '1'&& ziffer != '0'){
System.out.println("Eine Binaerzahl besteht nur aus 0 und 1!");
System.exit( 0 );}}[/Java]


[Java]import java.util.Scanner;

public class Binaer {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

System.out.println("Geben sie eine Binaerzahl ein, um diese in eine Dezimalzahl umrechnen zu lassen: \n");



String bin = scanner.next();
int laenge = bin.length();
double sum = 0;
char [] ziffer = bin.toCharArray();


for (int i=0;i < laenge; i++){
if (ziffer != '1'&& ziffer != '0'){
System.out.println("Eine Binaerzahl besteht nur aus 0 und 1!");
System.exit( 0 );}}


for (int n = 0 ; +laenge > n ; n++){

if (ziffer[n] == '0')
sum = sum + 0;
else
sum = sum + Math.pow(2, laenge-1 -n); }

System.out.println("Binaerzahl: " +bin+ "\nAls Dezimalzahl: " + sum);}



}[/Java]
 

XHelp

Top Contributor
Weder
Code:
sum=sum;
noch
Code:
sum=sum+0;
bewirkt irgendwas. Also kannst du auch direkt auf =='1' prüfen und den else-Zweig weglassen.

Benutz lieber IMMER die geschweiften Klammer und achte auf die Codeeinrückung.
 

Andi_CH

Top Contributor
@Andi_CH:
naja das + vor laenge hätt ich mir sparen können, da hast du recht ;)
Aber das [Java]sum = sum + 0[/Java] brauch ich doch um zu beschreiben was er für den Fall machen soll, dass an der Stelle der Binärzahl eine '0' steht. Oder hätte [Java]sum = sum [/Java] auch gereicht?
Nein, das brauchst du echt nicht. Der Kompiler schafft es definitv ohne und für den Menschen ist Komentar besser geeignet als Code

Java:
if (ziffer[n] == '1')
    sum = sum + Math.pow(2, laenge-1 -n); }

reicht völlig!

In komplexeren Beispielen als diesem hier würde ich einen Kommentar hinschreiben, so im Sinne

// Im Fall von Ziffer[n]='0' bleib sum unverändert

Ich denke hier ist es auch ohne Text klar genug : Im Falle von 1 wird etwas addiert. Im Falle von 0 eben nicht.

Wir sind ja schon so weit, hier das Ganze:
Java:
import java.util.Scanner;

public class Binaer {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);

		System.out.println("Geben sie eine Binaerzahl ein, um diese in eine Dezimalzahl umrechnen zu lassen: \n");

		String bin = scanner.next();
		int laenge = bin.length();
		double sum = 0;
		char [] ziffer = bin.toCharArray();

		for (int i=0;i < laenge; i++){
			if (ziffer[i]  != '1'&& ziffer[i] != '0'){
				System.out.println("Eine Binaerzahl besteht nur aus 0 und 1!");
				System.exit( 0 );
			}
		}

		for (int n = 0 ; laenge > n ; n++){
			if (ziffer[n] == '1') {
				sum += Math.pow(2, laenge-1 -n);
			}
		}
		System.out.println("Binaerzahl: " +bin+ "\nAls Dezimalzahl: " + sum);
	}
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Binär zu Dezimal Java Basics - Anfänger-Themen 16
J Dezimal in Binär (Array) Java Basics - Anfänger-Themen 2
Z Dezimal > Binär-Umrechnung Logikfehler? Java Basics - Anfänger-Themen 8
K Erste Schritte Dezimal in binär Java Basics - Anfänger-Themen 17
S Umwandlung Binär in Dezimal (ohne array etc.) Java Basics - Anfänger-Themen 6
V Binär in Dezimal Java Basics - Anfänger-Themen 4
S Umrechner (Dezimal, Hexadezimal und Binär) Java Basics - Anfänger-Themen 3
C dezimal in binär Java Basics - Anfänger-Themen 3
N Umrechung Binär in Dezimal und Hexadezimal Java Basics - Anfänger-Themen 7
B Dezimal Binär? Java Basics - Anfänger-Themen 10
R Unicode-Wert in Binär und Dezimal umformen - kleines Problem Java Basics - Anfänger-Themen 1
C Hilfe bei Umrechnung von dezimal nach binär Java Basics - Anfänger-Themen 9
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
A Dezinal in Binär Recursiv Java Basics - Anfänger-Themen 6
W Dez-->Binär mit eigener bit Anzahl Erkennung. Java Basics - Anfänger-Themen 3
parrot Binär Addieren Java Basics - Anfänger-Themen 21
F Erste Schritte Binär zahle auf 8 stellen aufüllen Java Basics - Anfänger-Themen 2
Orkanson Long Binär darstellen Java Basics - Anfänger-Themen 1
W Dezimalzahl in Binär umwandeln - Was sollte ich an meinem Programm verbessern? Java Basics - Anfänger-Themen 5
L String in Binär umwandeln Java Basics - Anfänger-Themen 4
ubaro1 Operatoren Der Tide Operator und positive Ganzzahlen in Binär Java Basics - Anfänger-Themen 1
T Erste Schritte Nachkommstellen in Binär mit Vekotoren Java Basics - Anfänger-Themen 3
M hexadezimal in binär mit Hilfe von Shift-Operatoren Java Basics - Anfänger-Themen 6
R Dezimalzahlen zu Binär Java Basics - Anfänger-Themen 3
B datentyp in binär umwandeln Java Basics - Anfänger-Themen 5
S binär string Java Basics - Anfänger-Themen 10
N Binär suchen: Java Basics - Anfänger-Themen 4
E Methoden umrechnung binär/oktal/hexadezimal in dezimalsystem (Methode) Java Basics - Anfänger-Themen 1
A double and add algorithmus für elliptische kurven/ integer binär darstellen Java Basics - Anfänger-Themen 14
K Binär Logisch Und, logisch Oder, subtrahieren Java Basics - Anfänger-Themen 8
G Binär in Byte speichern Java Basics - Anfänger-Themen 7
eLogic .txt Testdatei to Binär Java Basics - Anfänger-Themen 2
F Hex zu Binär Java Basics - Anfänger-Themen 7
Shanks Problem bei Binär überprüfung Java Basics - Anfänger-Themen 3
S Array Daten in Binär Datei schreiben/lesen Java Basics - Anfänger-Themen 11
H Java Double in Binär, Hex oder Octalzahl wandeln Java Basics - Anfänger-Themen 3
JeromeM90 (Brauche Hilfe) Binär- in Dezimalzahlkonverter Java Basics - Anfänger-Themen 8
N Binär Datei kopieren Java Basics - Anfänger-Themen 2
T longs binär verarbeiten Java Basics - Anfänger-Themen 4
G Objekte binär speichern und später wieder einlesen? Java Basics - Anfänger-Themen 7
G char[] binär schreiben? Java Basics - Anfänger-Themen 2
V Binär + Hexadezimal Java Basics - Anfänger-Themen 3
V String mit Hexadezimalzahlen in Binär umwandeln Java Basics - Anfänger-Themen 2
A Binär-Datei versenden übers Internet Java Basics - Anfänger-Themen 2
R String nach Binär-Form Java Basics - Anfänger-Themen 3
Ostkreuz Methoden Von Dezimal zu Hexadezimal Methode toHex Java Basics - Anfänger-Themen 2
S Algorithmus (reelle Zahl <65536 von dezimal zu dual) max. 10 Nachkommastellen Java Basics - Anfänger-Themen 4
JD_1998 Vorgegebene Methode erweitern um Hex -> Dezimal umzuwandeln Java Basics - Anfänger-Themen 1
P Dezimal zu Hexadezimalzahl Funktion Java Basics - Anfänger-Themen 5
D Dezimal zu Dual mit Rückgabewert Java Basics - Anfänger-Themen 39
G Dezimal zu Binärcode Programm Java Basics - Anfänger-Themen 9
D Umrechnung dezimal -> oktal | signed/unsigned? Java Basics - Anfänger-Themen 1
L Dezimal- zu Binärsystem Java Basics - Anfänger-Themen 4
P 32 Bit Binärzahl Umwandeln in Dezimal Java Basics - Anfänger-Themen 8
D römische Zahlen in Dezimal ausgeben Java Basics - Anfänger-Themen 9
dave253 IEEE-Norm in Dezimal Java Basics - Anfänger-Themen 12
W Umwandeln von Dezimal in Dual - Ausgabe incl. Rechenschritte Java Basics - Anfänger-Themen 11
H Erste Schritte Uhrzeit anzeigen in Minuten Dezimal Java Basics - Anfänger-Themen 8
F Erste Schritte Dezimal in Hexadezimal Java Basics - Anfänger-Themen 5
F Erste Schritte [GUI] Dual in Dezimal rechnen Java Basics - Anfänger-Themen 5
N Compiler-Fehler Dezimal to binary Java Basics - Anfänger-Themen 2
C Dezimal- und InputVerifier/FocusListener Probleme Java Basics - Anfänger-Themen 3
E Hexadezimal in Dezimal Java Basics - Anfänger-Themen 25
G Java Dezimal Zahlen Internazialisation Problem Java Basics - Anfänger-Themen 7
M Verständnisfrage zur Zahlenumwandlung (Dezimal-->Dual) Java Basics - Anfänger-Themen 25
U Dezimal zu Hexadezimal rekursive Funktion Java Basics - Anfänger-Themen 8
F dezimal zu hexadezimal Java Basics - Anfänger-Themen 14
V Tool zum Umrechnen Dezimal in Hex Java Basics - Anfänger-Themen 7
B Dezimal --> Hex Java Basics - Anfänger-Themen 3
M String(Binärzahl) in Dezimal umwandeln Java Basics - Anfänger-Themen 4
S Dual in Dezimal umwandeln? Java Basics - Anfänger-Themen 24
G Dezimal zu Hexadezimal Java Basics - Anfänger-Themen 2
S Dezimal- in Hexadezimalzahl umwandeln Java Basics - Anfänger-Themen 4
M wie hexadezimal in dezimal wandeln? Java Basics - Anfänger-Themen 16
O Dezimal in Dual...Arraygröße & Runden Java Basics - Anfänger-Themen 4
X Dezimal/-Hexcode in lebares format umwandeln Java Basics - Anfänger-Themen 4
S dezimal od. hexadezimal Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben