Fork me on GitHub

Java 语言基础之数组应用

  1. 什么时候使用数组呢?
    如果数据出现了对应关系, 而且对应关系的一方是有序的数字编号, 并作为角标使用.
    这时,就必须要想到数组的使用. 也就是将这些数据存储到数组中, 根据运算的结果作为角标,
    直接去查数组中对应的元素即可.

这种方式称为 查表法 .

需求: 获取一个整数的十六进制表现形式

public static void toHex(int num)
{
    // 健壮性判断
    if(num==0)
    {
        System.out.print("0");
        return; //函数执行结束
    }
    // 定义一个对应关系表
    char[] chs = {'0','1','2','3',
                  '4','5','6','7',
                  '8','9','A','B',
                  'C','D','E','F'
              };
    /*
    一会查表会查到比较多的数据,数据一多, 就先存储起来, 在进行操作.
    所以定义一个数组, 当作临时容器.
    而 int 类型, 四个字节,占32个二进制位, 四个二进制位代表一个十六进制位,
    所以临时容器长度为 8
    */
    char[] arr = new char[8];
    int pos = 0;

    while(num!=0)
    {
        int temp = num&15;
        arr[pos++] = chs[temp];
        num = num >>> 4;   // 使用无符号右移
    }

    // 将结果打印
    System.out.println("pos="+pos);
    for(int x = pos-1; x>=0; x--)
    {
        System.out.print(arr[x]);    
    }
}

代码改进为任意进制:
// 十进制 --\> 十六进制
public static void toHex(int num)
{
    trans(num, 15, 4);
}

// 十进制 --\> 二进制
public static void toBinary(int num)
{
    trans(num, 1, 1);
}

// 十进制 --\> 八进制
public static void toOctal(int num)
{
    trans(num, 7, 3);
}

public static void trans(int num, int base, int offset)
{
    if(num == 0)
    {
        System.out.println("0");
        return;
    }
    char[] chs = {
                   '0','1','2','3','4','5',
                   '6','7','8','9','A','B',
                   'C','D','E'
               };
    char[] arr = new char[32]; // 二进制最长
    int pos = 0;

    while(num != 0)
    {
        int temp = num & base; // 二进制与 1,八进制与 7,
        arr[post++] = chs[temp];
        num = num >>> offset; // 二进制右移 1 位, 八进制右移 3 位
    }

    // 输出结果
    for(int x = pos - 1; x>=0; x--)
    {
        System.out.print(arr[x]);
    }
    System.out.println(); // 输出完成后,换行

}

参考资料:

posted @ 2017-08-24 12:54  小a的软件思考  阅读(208)  评论(0编辑  收藏  举报