Binär in Dezimal

valentina2013

Bekanntes Mitglied
Hallo, ich möchte eine binäre Zahl die als String eingelesen wird in dezimale umwandeln. Hir meine Q.Code:
Java:
public class BinaryToDezimal {
	public static void main(String[] args) {
		
	System.out.println("Geben sie eine binäre Zahl ein:");
	Scanner eingabe=new Scanner(System.in);
	String k=eingabe.nextLine();
	int zahl=0;
	double pow = 0;
		for (int i = k.length()-1; i >= 0; i--){
			zahl = zahl+ ((k.charAt(i)) * (int) Math.pow(2, pow));
			pow++;
		}
		System.out.println(zahl);
	}
ich glaube zu wissen wo mein Problem liegt:der String inhalt kann nicht als int (zeile 11) eingelesen/umgewandelt werden. Könnt ihr mir dabei helfen dies umzugehen??
Danke
 
Zeile 11 ist [c]pow++[/c]. Was du aber in zeile 10 machst [c].charAt(i)[/c] ist völlig sinnlos, weil der ASCII-Wert eine Zeichens nichts mit dem Zeichen an sich zu tun hat. Prüfe stadtdessen mit [c]==[/c]: [c]if (k.charAt(i) == '1')[/c]
 
habe so umgeändert
Java:
public class BinaryToDezimal {
	public static void main(String[] args) {

		System.out.println("Geben sie eine binäre Zahl ein:");
		Scanner eingabe = new Scanner(System.in);
		String k = eingabe.nextLine();
		char[] ziffer = k.toCharArray();
		int zahl = 0;
		
		for (char a: ziffer) {
			zahl = 2 * zahl + (a - '0');
		}
		
		System.out.println(zahl);

	}

}

es funktioniert. verstehe aber nicht was das
Java:
zahl = 2 * zahl + (a - '0');
macht 🙁
 
es funktioniert. verstehe aber nicht was das
Java:
zahl = 2 * zahl + (a - '0');
macht 🙁

Das nutzt die Tatsache, dass die Zeichen
Code:
0
und
Code:
1
im ASCII-Zeichensatz direkt aufeinander folgen (48 ist 0, 49 ist 1). In Java ist ein
Code:
char
das gleiche wie ein
Code:
short
. Wennd ua lso schreibst
Java:
'1' - '0'
Compileirt das der Compiler nach
Java:
49 - 48
und das Ergebnis ist
Code:
1
.

Ist nun also das Zeichen ein '1', ist [c]a - '0'[/c] 1, ist es ein '0', ist [c]a -'0'[/c] 0. Im nächsten durchgang wird die Zahl mit zwei multipliziert. War also das vorherige Zeichen ein '1', wirkt sichd as aus. Webnn es ein '0' war, nicht.
 

Zurück
Oben