다음은  대화형 모드(interactive mode)에서 진법 변환(radix conversion)하는 자바 소스 코드이다.
메뉴는 주메뉴 Command: (S)et radix, (A)bout, (Q)uit or E(x)it
와 부메뉴 SubCommand: 'main()' to goto Main menu, 'exit()' or 'quit()' to exit
로 구성되어 있으며, 진법 변환의 핵심은 Integer 클래스와 Long 클래스의 정적 메소드

         Integer.parseInt(String, int);
         Long.toString(long, int);

을 이용하였으며, 지원되는 진법은 2진법부터 36진법까지이다.



  1. /*
  2.  *  Filename: ConvertRadixApp.java
  3.  *            Convert radix in a interactive mode.
  4.  *
  5.  *  Compile: javac -d . ConvertRadixApp.java
  6.  *  Execute: java ConvertRadixApp
  7.  *
  8.  *      Date:  2008/03/25
  9.  *    Author:  PH Kim   [ pkim (AT) scripts.pe.kr ]
  10.  */
  11. import java.io.*;
  12. import java.util.*;
  13. public class ConvertRadixApp {
  14.     public static void printUsage() {
  15.         System.out.println("Usage: java ConvertRadixApp");
  16.         System.out.println("Convert radix in a interactive mode, where the maximum radix is 36.");
  17.     }
  18.     public void printAbout() {
  19.         System.out.println("    About: Convert radix in a interactive mode.");
  20.     }
  21.     public void printMainMenu() {
  22.         System.out.println("  Command: (S)et radix, (A)bout, (Q)uit or E(x)it");
  23.     }
  24.     public void printMainPrompt() {
  25.         System.out.print("  Prompt> ");
  26.     }
  27.     public void printSubMenu(int srcRadix, int destRadix) {
  28.         System.out.println("    Convert Radix_" + srcRadix + " to Radix_" + destRadix);
  29.         System.out.println("    SubCommand: 'main()' to goto Main menu, 'exit()' or 'quit()' to exit");
  30.     }
  31.     public void printSubPrompt() {
  32.         System.out.print("    Input Value>> ");
  33.     }
  34.     public String convertRadix(String s,  int srcRdx, int destRdx) {
  35.         long val;
  36.         String ret = "";
  37.         try {
  38.             val = Integer.parseInt(s, srcRdx);
  39.             ret = Long.toString(val, destRdx);
  40.             return ret.toUpperCase();
  41.         }
  42.         catch (NumberFormatException nfx) {
  43.             System.out.println("    Error: " + nfx.getMessage() + " cantains some invalid character.");
  44.             ret = "????";
  45.         }
  46.         finally {
  47.             return ret.toUpperCase();
  48.         }
  49.     }
  50.     public void doConvert(BufferedReader r, int srcRadix, int destRadix) {
  51.         String line;
  52.         String cmd;
  53.         String srcStr = "", destStr = "";
  54.         System.out.println();
  55.         printSubMenu(srcRadix, destRadix);
  56.         try {
  57.             do {
  58.                 printSubPrompt();
  59.                 while ((cmd = r.readLine()) == null) {
  60.                 }
  61.                 if ("main()".equals(cmd)) {
  62.                     return;
  63.                 }
  64.                 else if ("exit()".equals(cmd) || "quit()".equals(cmd)) {
  65.                     System.exit(0);
  66.                 }
  67.                 try {
  68.                     Integer.parseInt(cmd, srcRadix);
  69.                     srcStr = cmd;
  70.                     destStr = convertRadix(srcStr, srcRadix, destRadix);
  71.                     System.out.println("        ( " + srcStr + " )_" + srcRadix +  "   --->   ( " + destStr + " )_" + destRadix);
  72.                     System.out.println();
  73.                 }
  74.                 catch (NumberFormatException nfx) {
  75.                 }
  76.              } while (true);
  77.         }
  78.         catch (IOException ex) {
  79.             ex.printStackTrace();
  80.         }
  81.     }
  82.     public void doStart() {
  83.         String line;
  84.         String cmd;
  85.         int srcRadix = 10, destRadix = 10;
  86.         String srcStr = "", destStr = "";
  87.         boolean onlyOnce = true;
  88.         BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
  89.         try {
  90.             do {
  91.                 System.out.println();
  92.                 if (onlyOnce) {
  93.                     System.out.println("  The supported maximum radix is 36.");
  94.                     onlyOnce = false;
  95.                 }
  96.                 printMainMenu();
  97.                 printMainPrompt();
  98.                 while ((cmd = r.readLine()) == null) {
  99.                 }
  100.                 if ("qQxX".contains(cmd) && cmd.length() == 1) {
  101.                     System.exit(0);
  102.                 }
  103.                 else if ("aA".contains(cmd) && cmd.length() == 1) {
  104.                     printAbout();
  105.                 }
  106.                 else if ("sS".contains(cmd) && cmd.length() == 1) {
  107.                     System.out.print("  Input the source and target radices (say, 16 2): ");
  108.                     line = r.readLine();
  109.                     StringTokenizer st = new StringTokenizer(line, " ,\t");
  110.                     while (st.countTokens() < 2) {
  111.                         System.out.print("  Input the source and target radices (say, 16 2): ");
  112.                         line = r.readLine();
  113.                         st = new StringTokenizer(line, " ,\t");
  114.                     }
  115.                     srcRadix = Integer.parseInt(st.nextToken());
  116.                     destRadix = Integer.parseInt(st.nextToken());
  117.                     doConvert(r, srcRadix, destRadix);
  118.                 }
  119.             } while (true);
  120.         }
  121.         catch (IOException ex) {
  122.             ex.printStackTrace();
  123.         }
  124.     }
  125.     public static void main(String[] args) {
  126.         if (args.length > 0 && "-h".equals(args[0])) {
  127.             printUsage();
  128.             System.exit(1);
  129.         }
  130.         ConvertRadixApp app = new ConvertRadixApp();
  131.         app.doStart();
  132.     }
  133. }



컴파일> javac -d . ConvertRadixApp.java

실행> java ConvertRadixApp

  The supported maximum radix is 36.
  Command: (S)et radix, (A)bout, (Q)uit or E(x)it
  Prompt> s
  Input the source and target radices (say, 16 2): 10 16

    Convert Radix_10 to Radix_16
    SubCommand: 'main()' to goto Main menu, 'exit()' or 'quit()' to exit
    Input Value>> 256
        ( 256 )_10   --->   ( 100 )_16

    Input Value>> main()

  Command: (S)et radix, (A)bout, (Q)uit or E(x)it
  Prompt> s
  Input the source and target radices (say, 16 2): 16 10

    Convert Radix_16 to Radix_10
    SubCommand: 'main()' to goto Main menu, 'exit()' or 'quit()' to exit
    Input Value>> FFFF
        ( FFFF )_16   --->   ( 65535 )_10

    Input Value>> exit()





Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

Posted by Scripter
,