# Zurück ins Dezimalsystem



## Vitali (2. Dez 2009)

Hallo Leute,
also ich hab mal wieder n Knoten im Hirn :lol:.
Wir sollen (Hausaufgabe) ein Programm schreiben das Zahlen in verschiede Zahlensysteme konvertiert (Binär, Oktal, Hexadezimal, Dezimal).

Der Hinweg (von dezimal ausgehend) hab ich schon geschreiben.
Beim Rückweg muss ich aber jetzt das Horner Schema verwenden.
Und nun das Problem:
Ich dachte mir das ich z.B. eine binäre Zahl (String nicht int) in ein Array packe und dann mit ner Schleife durchrenne.
Leider weiß ich nicht wie man java mitteilt:

NIMM DIE ERSTE STELLE MEINES STRINGS UND SETZTE SIE AUF DIE ERSTE STELLE DES FELDES USW.

erlich gesagt weiß ich auch nicht wie ich eine bestimmte stelle eines strings überhaupt ausdrücke 
:bahnhof:

bin für jede form von hilfe dankbar

PS: ist vielleicht unnötig das zu erwähnen: wir dürfen natürlich keine java-internen methoden verwenden (wie toHexString() oder so)


----------



## maki (2. Dez 2009)

*verschoben*

Deine Idee ist nicht verkehrt, dürft ihr denn [c]String.toCharArray()[/c] verwenden?


----------



## w0ddes (2. Dez 2009)

Hallo,

also meine erste Idee wäre es, das ganze in einen char-Array umzuwandeln -> jedes Stelle bekommt ein eigenes Feld und dann jedes char-feld in in ein int-feld in einem int-array umwandeln.

Pseudocode: 


```
String myString = "1101011";
char [] myCharArray = myString.toCharArray ();
int[] myIntArray = new int[myString.length];

for(int i = 0; i < myString.length; i++){
  myIntArray[i] = Integer.parseInt(myCharArray[i]);
}
```


----------



## dngfng (2. Dez 2009)

upps - wer lesen kann ist ganz klar im vorteil - hatte überlesen das du den hinweg bereits hast aber den Rückweg brauchst.


```
public static void main(String[] args) {
	    int in = 51;
	    System.out.println("Integer: " + in);
	    //integer to binary
	    String by = Integer.toBinaryString(in);
	    System.out.println("Byte: " + by);
	    //integer to hexadecimal
	    String hex = Integer.toHexString(in);
	    System.out.println("Hexa decimal: " + hex);
	    //integer to octal
	    String oct = Integer.toOctalString(in);
	    System.out.println("Octal: " + oct);
  }
```


Das Objekt Integer stellt die relevanten Methoden bereit.


----------



## Vitali (2. Dez 2009)

Sorry,  hab nicht gewusst das es so einen Tread gibt.

@maki 
in der aufgabenstellung steht: "keine Methoden zur Umrechnung von Zahlen zwischen verschiedenen Systemen"
also wahrscheinlich ja

@ w0ddes 
danke war genau was ich gesucht habe

ich glaub ich komm jetzt allein klar :rtfm:

MfG
Vitali


----------



## dngfng (2. Dez 2009)

So jetzt aber:


```
String binaryString = "1001";
	    int binaryBase = 2;
	    int decimal = Integer.parseInt(binaryString, binaryBase);
	    System.out.println(decimal);
	    int octalBase = 8;
	    String octalString = "72";
	    int octal = Integer.parseInt(octalString, octalBase);
	    System.out.println(octal);
```


----------



## Vitali (2. Dez 2009)

dngfng hat gesagt.:


> upps - wer lesen kann ist ganz klar im vorteil



hast vollkommen recht lies doch mal mein PS ganz unten im ersten beitrag


----------



## dngfng (2. Dez 2009)

Vitali hat gesagt.:


> hast vollkommen recht lies doch mal mein PS ganz unten im ersten beitrag



lol - ja - besser alles doppelt und dreifach lesen - währe ja sonst zu einfach.

Zu Uni Zeiten hatten wir uns auch sehr über die Aufgabe gefreut eine Linked List in Java zu programmieren anstatt ArrayList oder der gleichen verwenden zu dürfen.


----------



## w0ddes (2. Dez 2009)

Freut mich, dass ich als "fortgeschrittener Anfänger" dir helfen konnte  
Bin selbst nur hier ins Forum gekommen um Hilfe zu bekommen und nun konnte ich sogar selbst helfen  :idea:


----------



## Vitali (2. Dez 2009)

was ne Linked List ist weiß ich leider nicht ???:L 
aber ich werde alle tipps behärzigen 

ich schleiß etz mal


----------



## w0ddes (2. Dez 2009)

Linked List und ähnliches wirst du bestimmt noch kennenlernen


----------



## dngfng (2. Dez 2009)

So jetzt aber Binary zu Dezimal:


```
String binaryString = "1001";
	    
	    char[] bin = binaryString.toCharArray();
	    
	    
	    int binValue = 1;
	    int decimal = 0;
	    
	    for(int i = bin.length-1;i>=0;i--) {
	    	if(bin[i]=='1') {
	    		decimal+=binValue;
	    	}
	    	binValue=binValue*2;
	    }
```

Ich geh jetzt mal von Little-Endian aus.


----------



## Vitali (2. Dez 2009)

ach gut das ich dich nochmal treff weil:

"parseInt" nur strings verarbeitet keine chars

daher funktioniert es nicht ganz


----------



## w0ddes (2. Dez 2009)

steht die frage noch offen? 

Wenn ja, könnte das so funktionieren? 


```
Integer.parseInt(String.valueOf(myCharArray[i]));
```


----------



## Vitali (2. Dez 2009)

jup jetzt klappt alles 

nochmal dankeschoen (englische tastatur ;()

:toll:


----------

