Dezimal zu Hexadezimal rekursive Funktion

updater

Mitglied
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:

Java:
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
 
Java:
public static String convertToHex(int zahl) {
    return Integer.toHexString(zahl).toUpperCase();
}
 
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:
Java:
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
Code:
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
Code:
String.valueOf(rest)
zurückgeben. Bei den >9 Werten kannst du auch
Code:
String.valueOf((char) ('A'+rest-10))
rechnen.
 
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:
Java:
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
Code:
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
Code:
String.valueOf(rest)
zurückgeben. Bei den >9 Werten kannst du auch
Code:
String.valueOf((char) ('A'+rest-10))
rechnen.


Danke für die Antwort. Ich werde es mal probieren. Würde das auch irgendwie ohne Auslagerung gehen?
 
Sicher. Musst eben vor der if-Abfrage
Code:
zahl%16
zu Hex umwandeln und dann
Code:
convertSingleDigit
-Stellen in der if durch dein Ergebnis ersetzen.
 
Sicher. Musst eben vor der if-Abfrage
Code:
zahl%16
zu Hex umwandeln und dann
Code:
convertSingleDigit
-Stellen in der if durch dein Ergebnis ersetzen.

Hey , also das mit der Auslagerugn hat super geklappt:

Java:
	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
 
Java:
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.
 

Zurück
Oben