2016-10-13 10 views
2

私はこれに近い他の質問をチェックしようとしましたが、私のために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"); 
     } 
    } 
} 

私が台無しにどこが私に教えてくださいすることができます。また、このコードを書く方法の別の方法ではなく、私がここでやった間違いを探していると言わざるを得ない。別の方法で共有しようと思っている人に感謝しますが、私はここで私の間違いを学ぶ必要があります。 ご協力いただきありがとうござい

+0

8進変換と16進変換の両方が間違っています。なぜなら、 "前の"桁を印刷する前に "最後の"桁*を再帰的に呼び出すからです。再帰呼び出しの後に 'print()'を移動してください。 – Andreas

+0

あなたのコードを実行しました。出力は、16進数(16進数)のシステムでは613です:562です。 – DimaSan

+0

やあ、アンドレアス、:)再び助けてくれてありがとう。しかし、Octalは正しい出力を与えます。 hexconverterの後にprint()を置くことも意味します(a/16)?? –

答えて

1

変更

public static void hexconverter(int a) { 
    if (a == 0) { 
     System.out.println(); 
    } else { 
     System.out.print(hexchart(a % 16)); 
     hexconverter(a/16); 
    } 
} 

public static void hexconverter(int a) { 
    if (a == 0) { 
     System.out.println(); 
    } else { 
     hexconverter(a/16); 
     System.out.print(hexchart(a % 16)); 
    } 
} 

ためにあなた進変換も正常に動作していません。逆の順序で印刷されます。だから、その指示も入れ替えただけです。

+0

これを試してみると、何も印刷されません。本気ですか? –

+0

あなたはこれを確認してください。できます。 –

+0

@ user2509521あなたは正しいです、それは本当に機能します。 – DimaSan

1

ビル・ゲイツ氏は、マイクロソフトでは「怠惰な人を雇って難しい仕事をする」と言いました。 ... "怠惰な人は簡単なやり方を見つけるだろうから"

あなたは、このコードを書く方法の別の方法を探していないと言いましたが、これは仕事を完了させるのにはずっと簡単な方法です。


public static String octalNumber = ""; 

public static void octalconverter(int a){ 

    while(a!=0){ 
     octalNumber = octalNumber + String.valueOf(a%8); 
     a = a/8; 
    } 
    System.out.println(new StringBuilder(octalNumber).reverse().toString()); 

} 

最終的な数は間違いだったreversed.Thatなければなりません。

+0

ポチョ、あなたは正しいですが、私は再帰を使うことが許されていますが、私は使えない繰り返しです。 :)しかし、怠惰な人がいなければ、私たちは皆歩いているだろう、歴史のなかの誰かが歩くのが怠惰で、それが彼が車を発明した理由で、おそらく別の人(または何人か)車を使うことが、彼らが飛行機を発明した理由です。もう一人の怠惰な人がすぐに来て、テレポーテーションになることを祈りましょう:) –

関連する問題