黑马程序员技术交流社区

标题: 十进制转换成任意进制的方法 [打印本页]

作者: 邵震    时间: 2013-3-29 18:10
标题: 十进制转换成任意进制的方法
本帖最后由 qwe8234118 于 2013-3-29 19:07 编辑
  1. class java0329d3
  2. {
  3.         public static void hanshu(int x,int y,int z)
  4.         {
  5.                 if(x==0)
  6.                 {
  7.                         System.out.println("您输入的数是:"+0);       
  8.                         return;
  9.                 }
  10.                 if(y==0)
  11.                 {
  12.                         return;
  13.                 }
  14.                 System.out.print("您输入的数转换后为:");
  15.                 char [] shuzu = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
  16.                 char [] arr=new char [32];
  17.                 int pos = arr.length;
  18.                 while (x!=0)
  19.                 {
  20.                         int temp =x&y;
  21.                         arr[--pos]=shuzu[temp];
  22.                         x=x>>>z;
  23.                 }
  24.                 for (int a=pos;a<arr.length ;a++ )
  25.                 {
  26.                         System.out.print(arr[a]);
  27.                 }
  28.         }
  29.         public static void to(int x,int y)
  30.         {
  31.                 int a=0,b=0;
  32.                 switch (y)
  33.                 {
  34.                 case 2:
  35.                         a=1;b=1;
  36.                         break;
  37.                 case 8:
  38.                         a=7;b=3;
  39.                         break;
  40.                 case 16:
  41.                         a=16;b=4;
  42.                         break;
  43.                 default:
  44.                         System.out.println("对不起老师没教我转换成你需要的这个进制的方式");
  45.                         break;
  46.                 }
  47.                 hanshu(x,a,b);
  48.         }
  49.         public static void main(String[] args)
  50.         {
  51.                 to(60,6);//逗号前输入想转化的十进制数,逗号后输入想转换的进制数。
  52.                 //逗号后面只能输入2.8.16. 输入任何非2.8.16的数字都将默认为16进制。
  53.         }
  54.         /*
  55.         public static void to(int x,int y)
  56.         {
  57.                         char [] shuzu = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
  58.                     String str="";
  59.                 if(x==0)
  60.                 {
  61.                         System.out.println("您输入的数是:"+0);        
  62.                         return;
  63.                 }
  64.                 System.out.print("您输入的数转换后为:");
  65.                
  66.                
  67.                 while (x!=0)
  68.                 {
  69.                         int temp =x%y;
  70.                         str= shuzu[temp]+str;
  71.                         x=x/y;
  72.                 }
  73.                 System.out.println(str);
  74.                
  75.         }
  76.       
  77.         public static void main(String[] args)
  78.         {
  79.                 to(60,8);//逗号前输入想转化的十进制数,逗号后输入想转换的进制数。
  80.                 //逗号后面只能输入2.8.16. 输入任何非2.8.16的数字都将默认为16进制。
  81.                 }
  82.                 */
  83. }
复制代码
谢谢楼下的学长

虽然三楼的公式有一句我看不懂,还有没解决我报错的问题。

不过让我知道原来代码还可以这样写啊

谢谢了  其实不是我想打这么多行,关键是没学到后期。
作者: 邵震    时间: 2013-3-29 18:16
这个是根据毕老师的视频想出来的  
视频里老师想转换输出的进制数需要改动数值

我就想能不能不改数值  直接告诉电脑 我想转成几进制的

结果就出来这个东西了

美中不足的是输入非2.8.16的数值报错 这个我没弄出来

嘿嘿 我的藏品又多一件了  哇恰恰

附上打印结果
假如输入的想转换的数值是0
您输入的数是:0
假如输入的数值符合要求,我输入的是60.
您输入的数转换后为:3c
作者: 李慧声    时间: 2013-3-29 18:38
直接用java提供的API吧 调用有误吧 第27行,40行
作者: 刘胜寒    时间: 2013-3-29 18:42
  1. public static void to(int x,int y)
  2.         {
  3.                         char [] shuzu = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
  4.                     String str="";
  5.                 if(x==0)
  6.                 {
  7.                         System.out.println("您输入的数是:"+0);        
  8.                         return;
  9.                 }
  10.                 System.out.print("您输入的数转换后为:");
  11.                
  12.                
  13.                 while (x!=0)
  14.                 {
  15.                         int temp =x%y;
  16.                         str= shuzu[temp]+str;
  17.                         x=x/y;
  18.                 }
  19.                 System.out.println(str);
  20.                
  21.         }
  22.       
  23.         public static void main(String[] args)
  24.         {
  25.                 to(60,5);//逗号前输入想转化的十进制数,逗号后输入想转换的进制数。
  26.                 //逗号后面只能输入2.8.16. 输入任何非2.8.16的数字都将默认为16进制。
  27.         }
复制代码
凑合着看,有事??2-16 进制任意转换
作者: 邵震    时间: 2013-3-29 18:45
李慧声 发表于 2013-3-29 18:38
直接用java提供的API吧 调用有误吧 第27行,40行

没错啊  我27行是定义两个空的变量,
40行是把通过选择语句选择出来的变量传给函数。
作者: fighting    时间: 2013-3-29 18:49
你的这段代码写的非常精巧,不知道是什么原理?
  1. while (x!=0)
  2.                 {
  3.                         int temp =x&y;
  4.                         arr[--pos]=shuzu[temp];
  5.                         x=x>>>z;
  6.                 }
复制代码
请指教。。。

我用JDK中提供的方法实现了一下,还是比较容易的
  1. public class Change2 {
  2.         public static String to(int x, int y) {
  3.                 switch (y) {
  4.                 case 2:
  5.                         return Integer.toBinaryString(x);
  6.                 case 8:
  7.                         return Integer.toOctalString(x);
  8.                 case 16:
  9.                         return Integer.toHexString(x);
  10.                 default:
  11.                         System.out.println("进制数必须为2、8、16中的一个");
  12.                         return null;
  13.                 }
  14.         }

  15.         public static void main(String[] args) {
  16.                 System.out.println(to(60, 15));
  17.         }
  18. }
复制代码

作者: 李慧声    时间: 2013-3-29 18:49
本帖最后由 李慧声 于 2013-3-29 18:51 编辑
qwe8234118 发表于 2013-3-29 18:45
没错啊  我27行是定义两个空的变量,
40行是把通过选择语句选择出来的变量传给函数。 ...

刚没看清楚,是逻辑有问题吧,16进制为什么要放在default当中,应该另起一个case 16
a = 15 ,;b = 4; 同时a和b要进行初始话,最后default中可以添加你的提示信息
        public static void to(int x,int y)
        {
                int a = 0,b = 0;
                switch (y)
                {
                case 2:
                        a=1;b=1;
                        break;
                case 8:
                        a=7;b=3;
                        break;
                case 16:
                        a=15; b=4;
                        break;
                default:
                        System.out.println("输入有误。。。");
                        break;
                }
                hanshu(x,a,b);
        }

作者: 邵震    时间: 2013-3-29 18:56
本帖最后由 qwe8234118 于 2013-3-29 19:19 编辑
似水像火 发表于 2013-3-29 18:42
凑合着看,有事??2-16 进制任意转换

帅哥 str是啥意思 我发现你简化我的代码里面唯一我不认识的就是str 解释一下呗
作者: 邵震    时间: 2013-3-29 18:58
李慧声 发表于 2013-3-29 18:49
刚没看清楚,是逻辑有问题吧,16进制为什么要放在default当中,应该另起一个case 16
a = 15 ,;b = 4; 同时 ...

扫噶  我刚才这样试了  可能是a,b没进行初始化 我向你这么打就提示错误。


懂了  以后尽量都初始化一下 就不会犯这样的错了
作者: 李慧声    时间: 2013-3-29 19:04
qwe8234118 发表于 2013-3-29 18:58
扫噶  我刚才这样试了  可能是a,b没进行初始化 我向你这么打就提示错误。

但是还是有一个问题:就是比如你输入的60,15的话会造成 arr[--pos]=shuzu[temp];这里数组下标越界,因为这个时候a和b都是0,要么你直接System.exit(0);要么,给a和b赋16进制的值,不过我觉得用swtich比较难办这一点,我建议用if else吧
作者: 邵震    时间: 2013-3-29 19:09
李慧声 发表于 2013-3-29 19:04
但是还是有一个问题:就是比如你输入的60,15的话会造成 arr[--pos]=shuzu[temp];这里数组下标越界,因为 ...

我解决了  你看我新发的代码 我在上面对a对应的y进行的判断  结果为0我就跳出语句

谢谢了
作者: 李慧声    时间: 2013-3-29 19:13
qwe8234118 发表于 2013-3-29 19:09
我解决了  你看我新发的代码 我在上面对a对应的y进行的判断  结果为0我就跳出语句

谢谢了 ...

呵呵 最后被你指点了 呵呵 互相提高呗
作者: 邵震    时间: 2013-3-29 19:16
fighting 发表于 2013-3-29 18:49
你的这段代码写的非常精巧,不知道是什么原理?请指教。。。

我用JDK中提供的方法实现了一下,还是比较容 ...
  1.                 while (x!=0)//判断x是否等于0,否就进行运算。
  2.                 {
  3.                         int temp =x&y;//定义一个临时变量temp,用于存储x&y的值。
  4.                         arr[--pos]=shuzu[temp];//把shuzu数组中temo角标位的数赋值给arr数组中箭头-1的角标
  5.                                                          //int pos = arr.length;就是设定一个箭头对应初始值为arr数组元素个数。
  6.                         x=x>>>z;//x右移4位,把值在赋值给x。
  7.                 }
复制代码

作者: 刘胜寒    时间: 2013-3-29 19:23
qwe8234118 发表于 2013-3-29 18:56
帅哥 str是啥意思 我发现你简化我的代码里面唯一我不认识的就是str 解释一下呗 ...

str 保存结果用的啊!!进制转换后的东西,类似你的arr
作者: 邵震    时间: 2013-3-29 19:26
似水像火 发表于 2013-3-29 19:23
str 保存结果用的啊!!进制转换后的东西,类似你的arr

扫噶 受教了  看来还是要多做题多敲代码  

吼吼 又学会不少知识
作者: 刘胜寒    时间: 2013-3-29 19:38
qwe8234118 发表于 2013-3-29 19:26
扫噶 受教了  看来还是要多做题多敲代码  

吼吼 又学会不少知识

哥们...  高看我了...菜鸟一个
作者: 邵震    时间: 2013-3-29 19:51
似水像火 发表于 2013-3-29 19:38
哥们...  高看我了...菜鸟一个

学海无涯,达者为先。至少你现在领先一步,一起加油看最后谁是学长  嘿嘿
作者: 刘胜寒    时间: 2013-3-30 19:50
qwe8234118 发表于 2013-3-29 19:26
扫噶 受教了  看来还是要多做题多敲代码  

吼吼 又学会不少知识

我在想怎么,没给我加技术分....
作者: 邵震    时间: 2013-3-30 19:58
似水像火 发表于 2013-3-30 19:50
我在想怎么,没给我加技术分....

斑马们太忙了  小马太多  你去技术份申请帖写申请去




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2