2016-10-13 6 views
2

Ich versuchte, andere Fragen in der Nähe zu diesem zu überprüfen, konnte aber keine Antwort für meine herausfinden, deshalb senden Sie es als neuen Beitrag. Hoffe, das wird kein Problem verursachen.Java decToHex in rekursiv - falsche Reihenfolge der Ausgabe

Ich versuche, einen einfachen JAVA-Code für die Konvertierung von Zahlen zu schreiben - von Dezimal zu Oktal oder Hex. Mit octal ist alles in Ordnung, aber mit hex ist die Ausgabe in falscher Reihenfolge. wie wenn die Antwort 613 - Programm gibt aus 316.

Hier ist mein vollständiger Code:

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"); 
     } 
    } 
} 

Können Sie mir bitte sagen, wo ich vermasselte. Ich muss auch sagen, dass ich nach dem Fehler suche, den ich hier gemacht habe, nicht nach einer anderen Möglichkeit, diesen Code zu schreiben. Danke denen, die bereit sind, einen anderen Weg zu teilen, aber wieder muss ich meinen Fehler hier lernen. Vielen Dank für Ihre Hilfe

+0

Sowohl die Oktal- als auch die Hexadezimalkonverter sind falsch, da Sie "letzte" Ziffer * vor * rekursivem Aufruf drucken, um "frühere" Ziffern zu drucken. Verschieben Sie 'print()' nach dem rekursiven Aufruf. – Andreas

+0

Ich lief Ihren Code und die Ausgabe war: '613 in Hexadezimal (Base16) System ist: 562'. – DimaSan

+0

hey Andreas, :) danke fürs nochmal Aushelfen. Aber Octal gibt die richtige Ausgabe. auch du meinst für hexconverter den print() nach hexconverter (a/16) ?? –

Antwort

1

ändern

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

Um

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

Ihre Oktal Umwandlung ist auch nicht richtig funktioniert. Es wird in umgekehrter Reihenfolge gedruckt. Also habe ich diese Anweisungen auch einfach getauscht.

+0

Wenn ich dies versuchte, wird nichts ausgedruckt. bist du sicher? –

+0

Bitte bestätigen Sie dies. Es klappt. –

+0

@ user2509521 Sie haben Recht, es funktioniert wirklich. – DimaSan

1

Bill Gates sagte einmal, dass er bei Microsoft immer "eine faule Person für einen schwierigen Job einstellen würde". ... "Weil eine faule Person einen einfachen Weg finden wird, es zu tun."

Ich weiß, Sie sagten, Sie suchen nicht nach einer anderen Möglichkeit, diesen Code zu schreiben, aber das ist viel einfacher Weg, um den Job zu erledigen.


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()); 

} 

Endzahl muss sein reversed.That ein Fehler war.

+0

Pocho, Sie haben Recht, aber ich darf nur Rekursive verwenden, und während ist eine Iteration, die ich nicht verwenden kann. :) Aber, ja, wenn es keine faulen Leute gäbe, würden wir alle immer noch laufen, jemand in der Geschichte wäre zu faul zum Laufen, und deshalb hat er das Auto erfunden, wahrscheinlich war ein anderer (oder jemand anderes) zu faul um das Auto zu benutzen, erfanden sie das Flugzeug. Lasst uns hoffen, dass bald eine andere faule Person kommt, damit wir teleportieren können :) –