Konvertieren von Dezimal zu Hex verwenden Rekursive Java-Methode
Ich brauche, um eine rekursive Methode, die wandelt eine dezimal-in hexadezimal.
Ich kann nicht mit Integer.toHexString
.
EDIT:ich versuchte diesen code, aber es funktioniert nicht richtig
public static String Hexa(String s) {
String result = "";
int n = Integer.parseInt(s);
int remainder = n % 16;
if (n == 0) {
return Integer.toString(0);
} else {
switch (remainder) {
case 10:
result = "A" + result;
break;
case 11:
result = "B" + result;
break;
case 12:
result = "C" + result;
break;
case 13:
result = "D" + result;
break;
case 14:
result = "E" + result;
break;
case 15:
result = "F" + result;
break;
default: result = Integer.toString(n/16) + result; break;
}
System.out.println(result);
return Hexa(Integer.toString(n/16)) + result;
}
}
Bearbeiten:
Geändert default
Fall und die if (n == 0)
loop return-Anweisung und es funktioniert wunderbar jetzt.
neuen code:
public static String Hexa(String s) {
String result = "";
int n = Integer.parseInt(s);
int remainder = n % 16;
if (n == 0) {
return "";
} else {
switch (remainder) {
case 10:
result = "A";
break;
case 11:
result = "B";
break;
case 12:
result = "C";
break;
case 13:
result = "D";
break;
case 14:
result = "E";
break;
case 15:
result = "F";
break;
default:
result = remainder + result;
break;
}
return Hexa(Integer.toString(n / 16)) + result;
}
}
- also, was haben Sie versucht?
Integer.toHexString
nicht konvertieren dezimal zu hexadezimal, sowieso 🙂- Du bist Verkettung zweimal, das ist, warum es nicht richtig funktioniert. Mischen Sie, bis die iteration mit Rekursion.
- So führen Sie eine Suche für:
" + result"
Ersetzen mit:<nothing>
und anwenden, die alle, aber das Letzte match. - Bemerken Sie in Ihrem rekursiven Aufruf, die Sie konvertieren Sie Ihre ganze Zahl in eine Zeichenfolge, um Sie zu konvertieren zurück an den Anfang deiner Funktion?
- Bitte fügen Sie ein Beispiel, was
doesn't work properly
bedeutet - Ich könnte sein, dass ich Mixe zu Stopfen, ich habe gerade angefangen java zu lernen für die Hochschule und dies ist eine Zuordnung, die ich zu tun habe. ich habe eine funktionierende Sache, aber das ist nicht rekursiv
- wenn ich in 1234 sollte es wieder 4D2, aber stattdessen gibt 00D77
- Die Standardeinstellung für den Schalter scheint nicht richtig zu mir...versuchen
default: result = remainder + result
? - das klappte auch, aber ich bekomme 04D2 statt 4D2, keine Ahnung?
- Für Ihre Basis-Fall, sind Sie wieder, führende Nullen als
"0"
, während ich glaube, Sie will einfach nichts zurück (d.h., den leeren string) - macht Sinn, habe es ausprobiert und es funktioniert! vielen Dank Euch allen!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist in deinem default-Klausel:
sollten Sie Lesen:
Werden, die Ihrem Programm zurück "04D2".
Aber es gibt mehrere andere Korrekturen, die Sie machen können:
Stoppen konvertieren und zurück, um den String. Zum Beispiel, dass die gleiche Linie kann nur sein:
default: result = remainder + result; break;
Ändern Sie auch Ihre Parameter Zeit, um
int
. Wenn Sie brauchen, um zu erhalten eineString
, dann machen diese eine Hilfsfunktion und machen Sie Ihre main-Funktion erhaltenString
.Brauchen Sie nicht, dass
break
am Ende Ihrerdefault
Brauchen Sie nicht einen Schalter. Nicht
'F' = 'A' + (15 - 10)
? Sie können herausfinden, wie man eine Formel bedeutet, dass eine beliebige Zahl im Bereich [10,15] den entsprechenden Buchstaben.Statt
Integer.toString(0)
können Sie"0"
... aber das ist nicht einmal notwendig, die Sie verwenden können""
zu vermeiden, dass führende0
in Ihrer Ausgabe. Wenn Sie sind besorgt für die Handhabung der spezielle Fall, wo die ganze Zahl ist"0"
fügen Sie eine Besondere Klausel.result = remainder + result
. Ist das nur zu ändern, die int zu String ? Sie können dies tun, klarer:result = "" + remainder
. Oder in diesem Fall mit Ihrer version vonInteger.toString
return Hexa(n/16) + result;
'F' = 'A' + (15 - 10)
Sache, wie funktioniert das?Den code unten kann Ihnen helfen, Ihr problem zu lösen:
Gut, für den zweiten Teil Ihrer Frage, glaube ich, dass Sie bekam Antwort von Herrn MondKin.
Inzwischen für den ersten Teil der Frage, hier ist die rekursive Methode wandelt eine dezimal-in hexadezimal.
Quell-und Referenz - dezimal-zu-hexadezimal-java-Programm.