# Dual in Dezimal umwandeln?



## Sopcast (3. Mai 2009)

Hallo alle zusammen,

ich habe folgenden Code, der eine duale zahl in dezimal umrechnen soll. Das Programm gibt bei binärzahl 1101 -->733 und nicht 13 aus:

```
public class DuallInDez {
	
	public static void main(String[]args)
	{
		String dual = "1101";
		int rest;
		int zahl=0;
		int potenzZahl =1;
		
		for(int i = dual.length()-1;i>=0;i--)
		{
		     rest = dual.charAt(i)*potenzZahl;
	                  zahl = rest + zahl;
		     potenzZahl = potenzZahl*2;
		}		
		System.out.println(zahl);
	}
}
```

Ich denke die rest-Berechnung ist nicht ganz korrekt. Aber mit typecast (int) davor hats nicht geklappt.

Vielen Dank für eure Hilfe!

Gruß


----------



## Ezra (3. Mai 2009)

int ergebnis= Integer.parseInt(Dualstring, 2);


----------



## SlaterB (3. Mai 2009)

dual.charAt(i) liefert z.B. '1', welches als int aber nicht 1 ist sondern 49 oder so,
schau dir die ASCII-Tabelle an


----------



## Stoggy (3. Mai 2009)

Hallo Sopcast,

also ich würde das mit


```
Integer.parseInt("1101",2));
```

lösen.

Gruß Stoggy

Nachtrag:
Da war Ezra wohl schneller


----------



## Sopcast (3. Mai 2009)

Vielen Dank für eure Antworten!
Mein Code sieht jetzt so aus, aber ich bekomme jetzt den Wert 52 :

```
public class Duallindiz {
	
	public static void main(String[]args)
	{
		String dual = "1101";
		int rest;
		int zahl=0;
		int potenzZahl =1;
		
		for(int i = dual.length()-1;i>=0;i--)
		{
			rest = Integer.parseInt(dual, 2); 
			zahl = rest + zahl;
			potenzZahl = potenzZahl*2;
		}		
		System.out.println(zahl);
	}
}
```

_Edit von L-ectron-X: Für Java-Code bitte 
	
	
	
	






		Java:In die Zwischenablage kopieren


-Tags verwenden![/SIZE][/i]

_


----------



## Sopcast (3. Mai 2009)

Achso!, ich brauce die for schleife ja gar nicht!
Aber ich muss das mit schleife machen, d.h. den umständlichen weg, für Anfäger...


----------



## Stoggy (3. Mai 2009)

Probiers mal so:


```
public static void main(String[]args)
	{
		String dual = "1101";
		System.out.println(Integer.parseInt(dual, 2);
	}
```


Gruß Stoggy


----------



## Ezra (3. Mai 2009)

Du kannst Dein gesamtes Programm ersetzen durch:


```
public class Duallindiz {
	
	public static void main(String[]args)
	{
		String dual = "1101";
			
		System.out.println(Integer.parseInt(dual,2);
	}
}
```

parseInt rechnet Dir schon den gesamten String um, nicht jedes char einzeln, wie Du das zuerst vorhattest.

Edit: Diesmal war Stoggy schneller


----------



## Stoggy (3. Mai 2009)

Ezra hat gesagt.:


> Du kannst Dein gesamtes Programm ersetzen durch:
> 
> 
> ```
> ...



@Ezra: Ja, aber ich war zu langsam für seinen letzten Post. ;(


----------



## Sopcast (3. Mai 2009)

Hallo ihr beiden,
aber wie mache ich es wenn ich jedes Zeichen einzeln bearbeiten möchte? Und noch eine Frage: Wie heißt der Code, wenn ich String dual einlesen möchte?

Gruß
Sopcast


----------



## Ezra (3. Mai 2009)

Den Rest bekommst Du über 

rest = Character.digit(dual.charAt(i),2) *potenzZahl; 

Wenn Du das in Deinem Ausgangsprogramm ersetzt, kommt auch 13 raus.



> @Ezra: Ja, aber ich war zu langsam für seinen letzten Post.


me2


----------



## SvenK (3. Mai 2009)

```
for (int i = dual.length() - 1; i >= 0; i--) {
	rest = Character.digit(dual.charAt(i), 10) * potenzZahl;
	zahl = rest + zahl;
	potenzZahl = potenzZahl * 2;
}
```
So sollte es funktionieren.


----------



## Sopcast (3. Mai 2009)

Hallo Ezra und SvenK

eure beiden Vorschläge funktionieren, aber ich verstehe nicht warum die Methode digit auch ein int braucht? Und warum funktioniert es mit 2 und 10?
Gruß


----------



## Ezra (3. Mai 2009)

Der zweite Int-Wert gibt die Basis der Zahl an. Das funktioniert auch zur Basis 10, weil 0 und 1 in der Basis 10 ebenfalls 0 und 1 sind.
Ich empfehle Dir, auch die API zu nutzen


----------



## Sopcast (3. Mai 2009)

OK, Tausend Dank für eure Hilfe!
Noch eine letzte Frage:
Welchen Code brauche ich um den String einlesen zu können? Das funktioniert nicht...

```
String dual = args[0];
```
Gruß
Sopcast


----------



## Stoggy (3. Mai 2009)

Also bei mir funktioniert das mit args[0].
Poste mal den kompletten Code von dir.


----------



## Spin (3. Mai 2009)

Um Strings einlesen zu lassen , müsstest du fertige Methoden importieren, die sich in bestimmten Paketen befinden.

Bsp. in java.util oder in java.io



```
Einlesen durch :

BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));

String name = eingabe.readLine();


oder:

Scanner sc = new Scanner(System.in);
     int i = sc.nextInt();  // Zahlen einlesen



grüße
```


----------



## Ezra (3. Mai 2009)

Jap, das müsste eigentlich gehen. Welche Fehlermeldung kommt denn, bzw was passiert oder passiert nicht?


----------



## Sopcast (3. Mai 2009)

Mein Code:

```
public class Duallindiz {
	
	public static void main(String[]args)
	{
		String dual = args[0];
		int rest;
		int zahl=0;
		int potenzZahl =1;
		
		for(int i = dual.length()-1;i>=0;i--)
		{
			rest = Character.digit(dual.charAt(i),2) *potenzZahl; 
			zahl = rest + zahl;
			potenzZahl = potenzZahl*2;
		}	
		System.out.println(zahl);
	}
}
```
Und die Fehlermeldung:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
	at Duallindiz.main(Duallindiz.java:5)

Vielen Dank! 
Gruß


----------



## Stoggy (3. Mai 2009)

der code funktioniert bei mir ohne probleme.
wie übergibst du denn das argument, also deine dualzahl?


----------



## Ezra (3. Mai 2009)

Dann hast Du für args nichts angegeben. Arbeitest Du mit Eclipse? Soll die Eingabe denn überhaupt über args erfolgen oder während des Programms eingegeben werden? Für letzteres brauchst Du die Methoden, die Spin genannt hat.


----------



## Sopcast (3. Mai 2009)

Ich komme gar nicht mal dazu. Wenn ich auf Run klicke erscheint sofort die Fehlermeldung


----------



## Ezra (3. Mai 2009)

Ja, weil args schon vorher angegeben werden muss. Aber wie man das angibt, hängt davon ab, welches Programm Du benutzt. Bei Eclipse wäre das bspw unter run - run configurations - arguments


----------



## Stoggy (3. Mai 2009)

Sopcast hat gesagt.:


> Ich komme gar nicht mal dazu. Wenn ich auf Run klicke erscheint sofort die Fehlermeldung



OK, dann is das Problem klar... 

Wenn du Netbeans verwendest, dann:
dein Projekt (rechte Maustaste) -> Properties -> Run -> Arguments
dort die Dualzahl eintragen.

Bei Eclipse:
ebenfalls die properties, dann "run/debug settings" -> arguments

Die "args" sind die Argumente, die beim Aufruf des Programms über die Kommandozeile angehängt werden können. args[0] für das erste argument args[1] für das zweite und so weiter...

bsp.:
java -jar deindateiname.jar 1101

Für das was du möchtest, musst auf die Lösung von Spin zurückgreifen.

Gruß Stoggy


----------



## Sopcast (3. Mai 2009)

Vielen Dank euch allen!!!
und die Tipps!!! Es funzt jetzt ohne Probleme! Ich habe die Eingabe so gemacht, wies Ezra beschrieben hat!

Viele Grüße
Sopcast


----------

