私はこれに近い他の質問をチェックしようとしましたが、私のために1つの答えを見つけることができませんでした。この問題が発生しないことを願っています。Java decToHex in recursive - 出力順序が間違っている
10進数から8進数または16進数に変換するための簡単なJAVAコードを作成しようとしています。 8進数ではすべて正常ですが、16進数の場合、出力は間違った順序になります。答えが613の場合のように - プログラムは、ここに316
を与え、私の完全なコードです:
import java.util.Scanner;
public class Cem {
public static void octalconverter(int a) {
if (a == 0) { //our base
System.out.println(); //I first put here return a, but then it was adding zeros to the end
} else {
System.out.print(a % 8);// first remainder = last digit, and so on
octalconverter(a/8); //recursively going till it is base
}
}
public static void hexconverter(int a) {
if (a == 0) {
System.out.println();
} else {
System.out.print(hexchart(a % 16));
hexconverter(a/16);
}
}
public static String hexchart(int a) {
String result = "";
if (a <= 9) {
result = a + result;
} else {
if (a == 10)
result = result + "A";
// System.out.print("A");
if (a == 11)
result = result + "B";
// System.out.print("B");
if (a == 12)
result = result + "C";
// System.out.print("C");
if (a == 13)
result = result + "D";
//System.out.print("D");
if (a == 14)
result = result + "E";
//System.out.print("E");
if (a == 15)
result = result + "F";
// System.out.print("F");
}
return result;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Scanner oScan = new Scanner(System.in);
System.out.println("Please enter your decimal number : "); //getting input
int num = oScan.nextInt(); //assigning
System.out.println("Enter 1 for Octal Base Conversion #### Enter 2 for Hex Conversion");
int num2 = oScan.nextInt();
if (num2 == 1) {
System.out.print(num + " in Octal(base8) system is : ");
octalconverter(num); //conversion
} else if (num2 == 2) {
System.out.print(num + " in Hexadecimal(base16) system is : ");
hexconverter(num);
} else {
System.out.println("You entered a wrong choice for conversion type, please restart the program");
}
}
}
私が台無しにどこが私に教えてくださいすることができます。また、このコードを書く方法の別の方法ではなく、私がここでやった間違いを探していると言わざるを得ない。別の方法で共有しようと思っている人に感謝しますが、私はここで私の間違いを学ぶ必要があります。 ご協力いただきありがとうござい
8進変換と16進変換の両方が間違っています。なぜなら、 "前の"桁を印刷する前に "最後の"桁*を再帰的に呼び出すからです。再帰呼び出しの後に 'print()'を移動してください。 – Andreas
あなたのコードを実行しました。出力は、16進数(16進数)のシステムでは613です:562です。 – DimaSan
やあ、アンドレアス、:)再び助けてくれてありがとう。しかし、Octalは正しい出力を与えます。 hexconverterの後にprint()を置くことも意味します(a/16)?? –