# Dezimal zu Hexadezimal rekursive Funktion



## updater (15. Nov 2010)

Guten Abend/Morgen Leute,

Ich habe hier eine rekursive Variante , um eine Zahl von Dezimal in Hexadezimal umzuwandeln.
Allerdings möchte ich eine Funktion (mit Rückgabewert) haben und keine Prozedur(ohne Rückgabewert). Ich bin noch ein Neuling im Programmieren und ich weiss nicht wie ich das am besten umschreiben kann. Die Funktion soll diese Form haben: 

public static String convertToHex( int zahl)

Einschränkung: keine Schleifen

Hier der bisherige Javacode:


```
public class test3 {

	public static void main(String[] args) { 
		print("Zahl eingeben: ");
		int zahl=readInt();
	    convertToHex(zahl); 
	   } 
	    
	   public static void convertToHex(int zahl){ 
	      
	      if (zahl > 15) convertToHex(zahl/16);

	      int Rest=zahl%16; 
	        
	      if (Rest == 0){
	    	  print("0");}
	      if (Rest == 1){
	    	  print("1");}
	      if (Rest == 2){
	    	  print("2");}
	      if (Rest == 3){
	    	  print("3");}
	      if (Rest == 4){
	    	  print("4");}
	      if (Rest == 5){
	    	  print("5");}
	      if (Rest == 6){
	    	  print("6");}
	      if (Rest == 7){
	    	  print("7");}
	      if (Rest == 8){
	    	  print("8");}
	      if (Rest == 9){
	    	  print("9");}
	      if (Rest == 10){
	    	  print("A");}
	      if (Rest == 11){
	    	  print("B");}
	      if (Rest == 12){
	    	  print("C");}
	      if (Rest == 13){
	    	  print("D");}
	      if (Rest == 14){
	    	  print("E");}
	      if (Rest == 15){
	    	  print("F");}
	      
	   } 
}
```

Habt Ihr irgendwelche Ideen, Tipps oder sogar eine Lösung? Danke schonmal im Vorraus

Gruß
updater


----------



## andiv (15. Nov 2010)

```
public static String convertToHex(int zahl) {
    return Integer.toHexString(zahl).toUpperCase();
}
```


----------



## XHelp (15. Nov 2010)

Wenn es schon eine Einschränkung gibt, dass man keine Schleifen benutzt, dann wird man die toHexString-Methode auch nicht benutzen dürfen...
Die Idee ist schon die richtige, nur du musst jetzt mit Rückgabewerten arbeiten:

```
public static String convertToHex(int zahl) {
  if (zahl>15) {
    return convertToHex(zahl/16) + convertSingleDitig(zahl%16);
  } else {
    return convertSingleDigit(zahl);
  }
}
```
So ungefähr. Wobei du deine ganzen if-Abfragen in die 
	
	
	
	





```
convertSingleDigit
```
-Methode auslagerst. Die ist dazu da um aus 0..15 > 0..F zu machen.

P.S. so viele If-Anfragen brauchst du nicht... wenn der Rest kleiner ist als 10, kannst du direkt ihn als 
	
	
	
	





```
String.valueOf(rest)
```
 zurückgeben. Bei den >9 Werten kannst du auch 
	
	
	
	





```
String.valueOf((char) ('A'+rest-10))
```
 rechnen.


----------



## updater (15. Nov 2010)

andiv hat gesagt.:


> ```
> public static String convertToHex(int zahl) {
> return Integer.toHexString(zahl).toUpperCase();
> }
> ```



Danke erstmal für deine Antwort, allerdings will ich das ohne Typkonvertierungen machen.


----------



## updater (15. Nov 2010)

XHelp hat gesagt.:


> Wenn es schon eine Einschränkung gibt, dass man keine Schleifen benutzt, dann wird man die toHexString-Methode auch nicht benutzen dürfen...
> Die Idee ist schon die richtige, nur du musst jetzt mit Rückgabewerten arbeiten:
> 
> ```
> ...




Danke für die Antwort. Ich werde es mal probieren. Würde das auch irgendwie ohne Auslagerung gehen?


----------



## XHelp (15. Nov 2010)

Sicher. Musst eben vor der if-Abfrage 
	
	
	
	





```
zahl%16
```
 zu Hex umwandeln und dann 
	
	
	
	





```
convertSingleDigit
```
-Stellen in der if durch dein Ergebnis ersetzen.


----------



## updater (15. Nov 2010)

XHelp hat gesagt.:


> Sicher. Musst eben vor der if-Abfrage
> 
> 
> 
> ...



Hey , also das mit der Auslagerugn hat super geklappt:


```
public static String convertSingleDigit(int zahl) {
		
		String s="";
        
	      if (zahl == 0){
	    	  s = "0";}
	      if (zahl == 1){
	    	  s = "1";}
	      if (zahl == 2){
	    	  s = "2";}
	      if (zahl == 3){
	    	  s = "3";}
	      if (zahl == 4){
	    	  s = "4";}
	      if (zahl == 5){
	    	  s = "5";}
	      if (zahl == 6){
	    	  s = "6";}
	      if (zahl == 7){
	    	  s = "7";}
	      if (zahl == 8){
	    	  s = "8";}
	      if (zahl == 9){
	    	  s = "9";}
	      if (zahl == 10){
	    	  s = "A";}
	      if (zahl == 11){
	    	  s = "B";}
	      if (zahl == 12){
	    	  s = "C";}
	      if (zahl== 13){
	    	  s = "D";}
	      if (zahl == 14){
	    	  s = "E";}
	      if (zahl == 15){
	    	  s = "F";}
	      
	      return s;}
```

Wie ich das jetzt ohne Auslagerung mache habe ich nicht verstanden, so wie du es beschrieben hast


----------



## XHelp (15. Nov 2010)

```
public static String convertToHex(int zahl) {
  //einzelne Stelle berechnen
  int rest = zahl%16;
  String singleLetter;
  if (rest < 10) {
    singleLetter = String.valueOf(rest);
  } else {
    singleLetter = String.valueOf((char) ('A' + rest - 10));
  }

  //und hier eben das Ergebnis einsetzen:
  if (zahl > 15) {
    return convertToHex(zahl / 16) + singleLetter;
  } else {
    return singleLetter;
  }
}
```
Zeilen 2-9 sind nichts anderes als deine convertSingleDigig-Methode, nur etwas zusammengefasst.


----------



## updater (15. Nov 2010)

Vielen Dank für deine Hilfe! Klappt alles wunderbar! :toll:

Wünsche einen schönen Tag.

Gruß

updater


----------

