当前位置: 代码迷 >> Java相关 >> Integer.toString()方法的一点疑问,该如何解决
  详细解决方案

Integer.toString()方法的一点疑问,该如何解决

热度:2942   发布时间:2013-02-25 21:50:16.0
Integer.toString()方法的一点疑问
Java code
  public static String toString(int i, int radix) {        if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX)        radix = 10;    /* Use the faster version */    if (radix == 10) {        return toString(i);    }    char buf[] = new char[33];    boolean negative = (i < 0);    int charPos = 32;    if (!negative) {        i = -i;    }    while (i <= -radix) {        buf[charPos--] = digits[-(i % radix)];        i = i / radix;    }    buf[charPos] = digits[-i];    if (negative) {        buf[--charPos] = '-';    }    return new String(buf, charPos, (33 - charPos));    }


其中,为什么要将 i转化成负数处理?

------解决方案--------------------------------------------------------
这个程序是不是进制转换工具,
如果是的话,你可以使正数和负数分开处理。
原程序作者是把整数统一转为负数数再进行处理 
你也可以统一转为正数再进行处理,比如:

Java code
public class TestConvertion {    public static void main(String[] args) {    System.out.println("\n---正数------");    for (int i = 2; i <= 36; i++) {// 测试100的 2进制 3进制 .....36进制        System.out.printf(" %2d进制:%7s", i,convert(100, i));        if (i % 6 == 1)        System.out.println();    }    System.out.println("\n---负数------");    for (int i = 2; i <= 36; i++) {// 测试-100的 2进制 3进制 .....36进制        System.out.printf(" %2d进制:%7s", i,convert(-100, i));        if (i % 6 == 1)        System.out.println();    }    }        /**     * @param decimal:要转换的数     * @param radix:找转换的进制     * @return:转换成功后的数据     */    static String convert(int decimal, int radix) {    if (radix < 2 || radix > 36)        throw new UnsupportedOperationException("输入错误");    // 十进制的数 允许转化成2进制 3进制 .....36进制,    // 并且以字符串形式返回    char[] a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();    int dividend = decimal < 0 ? -decimal : decimal;// 被除数,有可能是负数    int divider = radix; // 除数    int quotient = 0;// 商    int remainder = 0;    String result = "";    while ((quotient = dividend / divider) != 0) {        remainder = dividend % divider;               result = a[remainder] + result;        dividend = quotient;// 重新初始化,更新被除数    }    remainder = dividend % divider;    result = a[remainder] + result;    if (decimal < 0)        return '-' + result;// 如果是负数    return result;    }}/*---正数------  2进制:1100100  3进制:  10201  4进制:   1210  5进制:    400  6进制:    244  7进制:    202  8进制:    144  9进制:    121 10进制:    100 11进制:     91 12进制:     84 13进制:     79 14进制:     72 15进制:     6A 16进制:     64 17进制:     5F 18进制:     5A 19进制:     55 20进制:     50 21进制:     4G 22进制:     4C 23进制:     48 24进制:     44 25进制:     40 26进制:     3M 27进制:     3J 28进制:     3G 29进制:     3D 30进制:     3A 31进制:     37 32进制:     34 33进制:     31 34进制:     2W 35进制:     2U 36进制:     2S---负数------  2进制:-1100100  3进制: -10201  4进制:  -1210  5进制:   -400  6进制:   -244  7进制:   -202  8进制:   -144  9进制:   -121 10进制:   -100 11进制:    -91 12进制:    -84 13进制:    -79 14进制:    -72 15进制:    -6A 16进制:    -64 17进制:    -5F 18进制:    -5A 19进制:    -55 20进制:    -50 21进制:    -4G 22进制:    -4C 23进制:    -48 24进制:    -44 25进制:    -40 26进制:    -3M 27进制:    -3J 28进制:    -3G 29进制:    -3D 30进制:    -3A 31进制:    -37 32进制:    -34 33进制:    -31 34进制:    -2W 35进制:    -2U 36进制:    -2S */
  相关解决方案