http://bbs.itheima.com/thread-199616-1-1.html 这个帖子里面我介绍了进制转换的另外一种方法 先介绍一下我的思路,就像图片中求8的二进制一样 除2 求、余数。 要是求的是8进制 就除8 求余数。
具体的代码:(注意下面的代码只能实现将一个正数装换其他的进制 ,由于负数在Java里面是这个负数对应的正数的二进制取反+1的形式存储的所以不能用这中思路去解决 ,但是http://bbs.itheima.com/thread-199616-1-1.html这个帖子中的方法可以实现负数的进制转换)
- //这个方法是用来帮助完成进制的转换的 就是toBinary() toHex() toOctal()三个方法将公共的代码进行了封装
- public static String to(int num,int set,StringBuilder resultBuilder,char[] findArr)
- {
- //如果传进来的数是0就直接返回“0”
- if(num==0)
- {
- return "0";
- }
- //如果穿件来的数字是负数 就返回null
- if(num<0)
- {
- return null;
- }
-
- //如果大于0就进行递归
- if(num>0)
- {
- to( num/set,set,resultBuilder,findArr);
- //将每次通过查表法得到的数据 存到resultBuilder中
- resultBuilder.append(findArr[num%set]);
- }
-
- //将最后的结果转换成字符串返回
- return resultBuilder.toString();
-
- }
-
- public static String toBinary(int num)
- {
- //定义一个字符串容器用来装最后的结果
- StringBuilder resultBuilder=new StringBuilder();
- //创建一个char数组 利用该数组完成查表操作 并为该数组赋初始值 因为是转换成二进制 最后的结果中只会出现0,1 所以findArr只用赋2个值
- char[] findArr=new char[]{'0','1'};
- return to(num,2,resultBuilder,findArr);
- }
-
- public static String toOctal(int num)
- {
- //定义一个字符串容器用来装最后的结果
- StringBuilder resultBuilder=new StringBuilder();
- //创建一个char数组 利用该数组完成查表操作 并为该数组赋初始值 因为是转换成八进制 最后的结果中只会出现0-7 所以findArr只用赋8个值
- char[] findArr=new char[]{'0','1','2','3','4','5','6','7'};
- return to(num,8,resultBuilder,findArr);
- }
-
- public static String toHex(int num)
- {
- //定义一个字符串容器用来装最后的结果
- StringBuilder resultBuilder=new StringBuilder();
- //创建一个char数组 利用该数组完成查表操作 并为该数组赋初始值 因为是转换成十六进制 最后的结果中只会出现0-f所以findArr只用赋16个值
- char[] findArr=new char[]{'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
- return to(num,16,resultBuilder,findArr);
- }
-
复制代码 按照上面的思路 我们可以写出将十进制转换成其他进制的方法 比如:转换成4进制
public static String toQuanternary(int num)
{ StringBuilder resultBuilder=new StringBuilder();
char[] findArr=new char[]{'0','1','2','3};
return to(num,4,resultBuilder,findArr);
}
|
|