黑马程序员技术交流社区

标题: 【阳哥专栏】技术分活动第8期 [打印本页]

作者: 王震阳老师    时间: 2014-8-5 23:48
标题: 【阳哥专栏】技术分活动第8期
本帖最后由 就业指导-王震阳老师 于 2014-8-18 11:07 编辑

声明:以后的技术分活动中的技术题,越来越偏向于数据结构、算法、JVM、多线程、高并发等,因此对于基础的要求也是更高的。
活动目的:练习javaSE知识,练习进制转换。

活动奖励:最高3个技术分

结束时间:2014年8月9日,过期提交可能获取不到技术分!

代码提交要求:将自己的源代码压缩然后提交,提交的时候设置为管理员权限,以其他方式提交的答案无效。上交源码的时候不需要将整个工程项目压缩,只需将用到的源文件压缩即可。

题目类型:JavaSE之进制转换。

难易程度:容易

题目:老规矩,回帖领题
更多技术分活动:
【阳哥专栏】技术分活动第12期
http://bbs.itheima.com/thread-138162-1-1.html

【阳哥专栏】技术分活动第11期
http://bbs.itheima.com/thread-137632-1-1.html
【阳哥专栏】技术分活动第10期
http://bbs.itheima.com/thread-136866-1-1.html
【阳哥专栏】技术分活动第9期
http://bbs.itheima.com/thread-136465-1-1.html
【阳哥专栏】技术分活动第8期
http://bbs.itheima.com/thread-135781-1-1.html
【阳哥专栏】技术分活动第7期
http://bbs.itheima.com/thread-134321-1-1.html
【阳哥专栏】周末技术分活动第6期
http://bbs.itheima.com/thread-132893-1-1.html
【阳哥专栏】周末技术分活动第5期
http://bbs.itheima.com/thread-129859-1-1.html
【阳哥专栏】周末技术分活动第4期
http://bbs.itheima.com/thread-128854-1-1.html
【阳哥专栏】周末技术分活动第3期
http://bbs.itheima.com/thread-127326-1-1.html
【阳哥专栏】周末技术分活动第2期
http://bbs.itheima.com/thread-125800-1-1.html
【阳哥专栏】周末技术分派送活动第1期
http://bbs.itheima.com/thread-123979-1-1.html





作者: cyc52tjm    时间: 2014-8-6 00:52
拿技术分。
作者: yueyouqiang    时间: 2014-8-6 01:48
看看题目
作者: shijianws    时间: 2014-8-6 04:24
看看题(^_^)
作者: 唕    时间: 2014-8-6 08:10
悄悄的走来
作者: 阿温    时间: 2014-8-6 08:11
领题!!!!!!!!!!!!!!!!!!!!!
作者: ddewym123    时间: 2014-8-6 08:25
本帖最后由 ddewym123 于 2014-8-6 09:44 编辑

请查收!

ConvertionTest.rar

871 Bytes, 阅读权限: 200, 下载次数: 1


作者: 丸子    时间: 2014-8-6 08:42
我要领题
作者: 萍水相逢    时间: 2014-8-6 08:55
领题做一下
作者: 冒牌高手    时间: 2014-8-6 08:55
看看题目
作者: 李彦来    时间: 2014-8-6 09:02
看一下下
作者: 喜爱    时间: 2014-8-6 09:10
来看看啊,嘻嘻嘻。。。。。。
作者: 天邃任我桓    时间: 2014-8-6 09:20
收到题目!
作者: Bule丶    时间: 2014-8-6 09:29
看看题啊
作者: justin1258    时间: 2014-8-6 09:41
又来领题喽~~:victory:
作者: 马超(Andy)    时间: 2014-8-6 09:42
看看题目
作者: java_668    时间: 2014-8-6 10:16
来看一下。。。
作者: 唕    时间: 2014-8-6 10:19
求分  求分

Demo.rar

869 Bytes, 阅读权限: 200, 下载次数: 3

阳哥求分


作者: liang926    时间: 2014-8-6 11:19
好,攒点技术分
作者: 小A    时间: 2014-8-6 11:24
领题喽喽
作者: 执笔梦    时间: 2014-8-6 11:33
努力试试.
作者: 贾浩田    时间: 2014-8-6 11:45
先下载,回去试试的
作者: 贾浩田    时间: 2014-8-6 11:47
为何我无法下载题目,提示我只有特定的用户可以下载
作者: 沟门大杏    时间: 2014-8-6 11:51
先来一个
作者: 贾浩田    时间: 2014-8-6 12:01
为何我无法下载题目呢?
作者: chen010yu    时间: 2014-8-6 12:18
路过进来看看
作者: 吴杰栋    时间: 2014-8-6 12:26
刚吃饱,拿个题目先
作者: 华夏文明_2008    时间: 2014-8-6 12:35
菜鸟也要看看是什么题:Q
作者: lilin202011    时间: 2014-8-6 13:04
看看试试
作者: lspooooo    时间: 2014-8-6 13:33
看看题目
作者: zhouqun    时间: 2014-8-6 13:47
做题啦            
作者: 尘埃落定    时间: 2014-8-6 14:02
信心百倍来领题
作者: 魏诚东    时间: 2014-8-6 14:12
看看题目~
作者: qingxi1    时间: 2014-8-6 14:33
我想参与,攒技术分

作者: li963309584    时间: 2014-8-6 14:43
技术分等好久了
作者: yueyouqiang    时间: 2014-8-6 15:15
没有做完整啊

Test_math.zip

1.19 KB, 阅读权限: 200, 下载次数: 4


作者: Mokill0911    时间: 2014-8-6 15:27
领题看看
作者: justin1258    时间: 2014-8-6 15:43
交题喽~~~支持大数转换哦~~

AryConvert.rar

2.04 KB, 阅读权限: 200, 下载次数: 1


作者: yqj    时间: 2014-8-6 15:51
看看题、、
作者: 沟门大杏    时间: 2014-8-6 15:54
阳哥请看

Test2.rar

932 Bytes, 阅读权限: 200, 下载次数: 1


作者: 王石    时间: 2014-8-6 17:21
什么题目看看
作者: tonglingwang    时间: 2014-8-6 17:57
我来领题了
作者: 教皇    时间: 2014-8-6 18:02
看看。。
作者: yqj    时间: 2014-8-6 18:30
本帖最后由 yqj 于 2014-8-7 10:29 编辑

ok,阳哥看看

NumConvertor.zip

1.44 KB, 阅读权限: 100, 下载次数: 1


作者: yqj    时间: 2014-8-6 18:50
本帖最后由 yqj 于 2014-8-7 10:29 编辑

再上传一个,BigInteger版的

NumConvertorForBigInt.zip

1.47 KB, 阅读权限: 100, 下载次数: 6


作者: wangyang    时间: 2014-8-6 19:50
阳哥威武
作者: sugar    时间: 2014-8-6 20:30
来领题目

作者: huoshao008    时间: 2014-8-6 20:51
回帖领题.

作者: 13155155528    时间: 2014-8-6 21:09
看看题目
作者: 追求卓越    时间: 2014-8-6 21:18
想看主题
作者: bbdeyouxang    时间: 2014-8-6 21:30
看看题!!!
作者: 冒牌高手    时间: 2014-8-6 21:34
本帖最后由 冒牌高手 于 2014-8-7 15:57 编辑

亲测可以满足要求,求分数,吼吼,第一次写,有点小激动啊,感觉代码的格烂的一比....

jinzhiZH.rar

1.91 KB, 阅读权限: 200, 下载次数: 1


作者: 双皮奶    时间: 2014-8-6 21:50
领题~~~:lol
作者: lcycr    时间: 2014-8-6 21:51
我来领题来了
作者: Vaz    时间: 2014-8-6 21:56
路过。,赞一个。
作者: 李利威    时间: 2014-8-6 21:58
额!!!老师我想试试
作者: 李利威    时间: 2014-8-6 22:28
杨哥!!摸着良心给吧

JinZhiZhuanHuan.zip

624 Bytes, 阅读权限: 10, 下载次数: 10


作者: snowaves    时间: 2014-8-6 22:43
看题看题
作者: bbdeyouxang    时间: 2014-8-6 23:07
完成,交题!

NumConvertTest.rar

1.17 KB, 阅读权限: 200, 下载次数: 2


作者: 叼哥    时间: 2014-8-6 23:24
领题。。。。
作者: yuqian268    时间: 2014-8-6 23:32
“接镖”
作者: gmz158    时间: 2014-8-6 23:50
来两分         
作者: WakeUp    时间: 2014-8-7 01:07
领题领题{:3_57:}
作者: li963309584    时间: 2014-8-7 07:08
完成了管理员的要求,不足之处还望指教!谢谢,求分!

Convert.zip

931 Bytes, 阅读权限: 200, 下载次数: 2


作者: 阿温    时间: 2014-8-7 09:13
本帖最后由 阿温 于 2014-8-7 09:27 编辑

我要上榜!阳哥辛苦了:

activity-convertRadix.zip

1.28 KB, 阅读权限: 200, 下载次数: 1


作者: 逸晨    时间: 2014-8-7 10:38
领题做一下。
作者: zeus00456    时间: 2014-8-7 11:11
求题!编之
作者: 澜天羽    时间: 2014-8-7 11:31
kankank                   看
作者: 叼哥    时间: 2014-8-7 12:05
还请笑纳

ConvertRadix.zip

1.24 KB, 阅读权限: 200, 下载次数: 1


作者: ssy1939    时间: 2014-8-7 14:23
看看题目是什么
作者: 奋斗的小耗子    时间: 2014-8-7 16:41
看看                              
作者: Stevenj    时间: 2014-8-7 16:46
辛苦阳哥了
作者: zeus00456    时间: 2014-8-7 18:06
本帖最后由 zeus00456 于 2014-8-7 18:22 编辑

终于搞定了,上传,求赏……
我整了两份,管理员sama按需下载吧(话说管理员权限是不是倒数第二个“黑马官方管理员”?)

下面这个是源码
Conversion.rar (2.81 KB, 下载次数: 2)

这个是没有包的版本,方便cmd使用
Conversion1.rar (2.78 KB, 下载次数: 0)

小小的说明一个,大部分都在注释中 2014-08-07_181545.rar (53.09 KB, 下载次数: 71)


ps:输入16进制的字母时,在中文输入法下会出问题,这个不知道是我电脑的问题还是其他,但是应该和代码关系不大。

作者: hanchun776    时间: 2014-8-7 19:58
回帖,拿题.
作者: huoshao008    时间: 2014-8-7 20:28
满足基本要求,不足之处请务必指正谢谢.

BinHexOctTest.zip

1.9 KB, 阅读权限: 200, 下载次数: 1


作者: zeus00456    时间: 2014-8-7 20:32
zeus00456 发表于 2014-8-7 18:06
终于搞定了,上传,求赏……
我整了两份,管理员sama按需下载吧(话说管理员权限是不是倒数第二个“黑马官 ...

坏了,我逗比了,我Eclipse默认编码集是utf-8,这是更正后的源码为了防止意外,追了一贴,管理员sama见谅

Conversion.rar (2.6 KB, 下载次数: 0)




作者: gmz158    时间: 2014-8-7 21:09
                        试一下            

Demo4.zip

752 Bytes, 下载次数: 110


作者: lpc4276139    时间: 2014-8-7 22:36
看看阳哥这次发的什么题
作者: 时光♪微凉    时间: 2014-8-8 00:22
看看题,好多的知识忘了,练习一下
作者: lvc    时间: 2014-8-8 01:20
来看看

作者: Vista    时间: 2014-8-8 07:49
看看题目:)
作者: surin    时间: 2014-8-8 09:00
看题再说
作者: 天黑偷牛    时间: 2014-8-8 09:33
果断要拿技术分
作者: 咸菜+萝卜干    时间: 2014-8-8 10:50
抢地主- -...
作者: 逸晨    时间: 2014-8-8 11:34
请查收。

Transition.zip

1.46 KB, 阅读权限: 200, 下载次数: 1


作者: Im_back    时间: 2014-8-8 13:25
这么牛?
作者: Im_back    时间: 2014-8-8 13:27
把题共享一下吧
作者: 晏敏    时间: 2014-8-8 20:44
看题太晚
作者: zimi626    时间: 2014-8-8 21:24
enya,看题拿分有么有
作者: 王震阳老师    时间: 2014-8-8 21:39
逸晨 发表于 2014-8-8 11:34
请查收。

挺好:
  1. import java.util.*;

  2. class  Transition
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 //x:表示初始的进制数。y:表示转换成的进制数。
  7.                 int x, y;
  8.                 int num;  //num:表示用户输入的数据转换为int类型的值。
  9.                 boolean flag = true; // flag:用于控制用户是否要进行下一轮数据的转换。
  10.                 while(flag)
  11.                 {
  12.                         flag = false;
  13.                         System.out.println("请输入您输入的数据是几进制的:如:2,8,10或是16:");
  14.                         x = input();
  15.                         x = judge(x);
  16.                         System.out.println("请输入您想要转换进制的数:");
  17.                         num = input(x);
  18.                         System.out.println("请输入您想要将数据转换成几进制:如:2,8,10或16");
  19.                         y = input();
  20.                         y = judge(y);
  21.                         zhuanHuan(num,x,y);
  22.                         System.out.println("您是否想进行下一次数据转换?是请输入:yes,否则输入:no");
  23.                         flag = goOn();
  24.                 }
  25.         }

  26.         //goOn():根据用户输入yes或no改变flag的值。
  27.         public static boolean  goOn()
  28.         {
  29.                 Scanner s = new Scanner(System.in);
  30.                 String str = s.next();
  31.                 if(str.equals("yes"))  return true;
  32.                 else if(str.equals("no"))  return false;
  33.                 else
  34.                 {
  35.                         System.out.println("您输入的格式不正确,请输入yes或者是no。");
  36.                         goOn();
  37.                 }
  38.         }

  39.         //input():用于接收用户输入的进制数。
  40.         public static int input()
  41.         {
  42.                 Scanner s = new Scanner(System.in);
  43.                 String str = s.next();
  44.                 int temp = Integer.parseInt(str);
  45.                 return temp;
  46.         }

  47.         //judge():用于判断进制输入是否正确。
  48.         public static int judge(int n)
  49.         {
  50.                 switch(n)
  51.                 {
  52.                         case 2:  return n;
  53.                         case 8: return n;
  54.                         case 10: return n;
  55.                         case 16: return n;
  56.                         default:  
  57.                         {
  58.                                 System.out.println("您输入的进制不正确,您只能输入2,8,10或者16。请重新输入:");
  59.                                 n = input();
  60.                                 n = judge(n);
  61.                                 return n;
  62.                         }
  63.                 }
  64.         }

  65.         //input(int x):用于接收用户输入的数据,并将它转换为十进制数。
  66.         public static int input(int x)
  67.         {
  68.                 Scanner s = new Scanner(System.in);
  69.                 String str = s.next();
  70.                 int temp = 0;
  71.                 try
  72.                 {
  73.                         temp = Integer.parseInt(str,x);
  74.                        
  75.                 }
  76.                 catch (NumberFormatException e)
  77.                 {
  78.                         System.out.println("您输入的数据格式不正确,请输入正确的数据格式:");
  79.                         temp = input(x);
  80.                 }
  81.                 return temp;
  82.         }
  83.        
  84.         //zhuanHuan方法:根据要转换成的进制数去调用相应的转换函数。
  85.         public static void zhuanHuan(int num, int x, int y)
  86.         {
  87.                 switch(y)
  88.                 {
  89.                         case 2:  toBin(num,x); break;
  90.                        
  91.                         case 8:  toOct(num,x); break;
  92.                        
  93.                         case 10:
  94.                         {
  95.                                 System.out.println(num+"的十进制形式是:" +num);
  96.                                 break;
  97.                         }
  98.                         case 16: toHex(num,x); break;
  99.                        
  100.                        
  101.                 }
  102.         }

  103.         //下面这三个方法分别转换成相应的进制。
  104.         public static void toBin(int num,int x)
  105.         {
  106.                 System.out.print("您输入的"+x+"进制数的二进制形式是:");
  107.                 trans(num,1,1);
  108.         }
  109.         public static void toOct(int num,int x)
  110.         {
  111.                 System.out.print("您输入的"+x+"进制数的八进制形式是:");
  112.                 trans(num,7,3);
  113.         }
  114.         public static void toHex(int num,int x)
  115.         {
  116.                 System.out.print("您输入的"+x+"进制数的十六进制形式是:");
  117.                 trans(num,15,4);
  118.         }
  119.        
  120.        

  121.         //trans():上边三个进制转换函数调用这个方法就可以完成进制的转换。
  122.         public static void trans(int num, int base, int offset)
  123.         {
  124.                 if(num == 0)
  125.                 {
  126.                         System.out.println(0);
  127.                         return;
  128.                 }

  129.                 char[] chs = {'0','1','2','3',
  130.                                         '4','5','6','7',
  131.                                         '8','9','A','B',
  132.                                         'C','D','E','F'};

  133.                 char[] arr = new char[32];

  134.                 int pos = arr.length;

  135.                 while(num != 0)
  136.                 {
  137.                         int temp = num & base;
  138.                         arr[--pos] = chs[temp];
  139.                         num = num >>> offset;
  140.                 }

  141.                 for(int i = pos; i < arr.length; i++)
  142.                 {
  143.                         System.out.print(arr[i]);
  144.                 }
  145.                 System.out.println();
  146.                 System.out.println();
  147.         }

  148. }
复制代码

作者: 王震阳老师    时间: 2014-8-8 22:02
阿温 发表于 2014-8-7 09:13
我要上榜!阳哥辛苦了:

给你公布出去,无法给满分是因为进制转换没有用自定义算法,而是调用的API。
  1. package cn.itcast.main;

  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;

  5. /**
  6. * @see 请用java编写代码实现如下功能:①让用户选择输入的数据格式(二进制、八进制、十进制、十六进制,输入错误时请给予友好提示)②让用户输入数据③让用户选择要转换成的进制单位④输出结果,并重复第①步。
  7. * 使用六个步骤完成:
  8. * 1.让用户选择输入的数据格式(二进制、八进制、十进制、十六进制,输入错误时请给予友好提示)
  9. * 2.让用户输入数据
  10. * 3.让用户选择要转换成的进制单位
  11. * 4.进制转换
  12. * 5.输出结果
  13. * 6.循环
  14. * @author weid
  15. *
  16. */

  17. public class Main
  18. {
  19.          /*
  20.          * 主函数:循环输入
  21.          */
  22.        
  23.         //使用公用静态输入流
  24.         static BufferedReader sysin=new BufferedReader(new InputStreamReader(System.in));
  25.        
  26.         //主函数
  27.         public static void main(String[] args) throws IOException
  28.         {
  29.                 //循环
  30.                 while(true)
  31.                 {
  32.                         convertNum();
  33.                 }

  34.         }
  35.        
  36.         //实现基本转化步骤
  37.         private static void convertNum() throws IOException
  38.         {
  39.                 //让用户选择输入的数据格式(二进制、八进制、十进制、十六进制,输入错误时请给予友好提示)
  40.                 int radixin=chooseRadix("输入");
  41.                 //让用户输入数据
  42.                 int num=inputNum(radixin);
  43.                 //让用户选择要转换成的进制单位
  44.                 int radixout=chooseRadix("输出");
  45.                 //进制转换
  46.                 String ans=convert(num,radixout);
  47.                 //输出结果
  48.                 System.out.println("结果为: "+ans);
  49.                 System.out.println();
  50.         }
  51.        

  52.         //选择进制
  53.         private static int chooseRadix(String form) throws IOException
  54.         {
  55.                 String s;
  56.                 System.out.println("请选择"+form+"数据格式:1.二进制;2.八进制;3.十进制;4.十六进制");
  57.                 s=sysin.readLine();
  58.                 while(!(s.equals("1")||s.equals("2")||s.equals("3")||s.equals("4")))
  59.                 {
  60.                         System.out.println("您输入的有误:请输入1,2,3,4中的一个");
  61.                         System.out.println("请选择"+form+"数据格式:1.二进制;2.八进制;3.十进制;4.十六进制");
  62.                         s=sysin.readLine();
  63.                 }
  64.                 switch (Integer.parseInt(s))
  65.                 {
  66.                 case 1:
  67.                         return 2;
  68.                
  69.                 case 2:
  70.                         return 8;

  71.                 case 3:
  72.                         return 10;
  73.                        
  74.                 case 4:
  75.                         return 16;
  76.                 default:
  77.                         return chooseRadix(s);
  78.                 }
  79.                
  80.         }
  81.        
  82.         //输入要转换的数字
  83.         private static int inputNum(int radix) throws IOException
  84.         {
  85.                 String s;
  86.                 int num=0;
  87.                 boolean flag=true;
  88.                 System.out.println("请输入要转换的数字");
  89.                 while(flag)
  90.                 {
  91.                         try
  92.                         {
  93.                                 s=sysin.readLine();
  94.                                 num=Integer.parseInt(s, radix);
  95.                                 flag=false;
  96.                         } catch (Exception e)
  97.                         {
  98.                                 System.out.println("输入有误请重新输入:");// TODO: handle exception
  99.                         }
  100.                 }
  101.                 return num;
  102.         }

  103.         //进制转换
  104.         private static String convert(int num, int radixout)
  105.         {
  106.                 switch(radixout)
  107.                 {
  108.                 case 2:
  109.                         return Integer.toBinaryString(num);
  110.                        
  111.                 case 8:
  112.                         return Integer.toOctalString(num);
  113.                        
  114.                 case 10:
  115.                         return Integer.toString(num);
  116.                
  117.                 case 16:
  118.                         return Integer.toHexString(num);
  119.                
  120.                 default:
  121.                         return null;
  122.                 }
  123.         }
  124. }
复制代码

作者: 王震阳老师    时间: 2014-8-8 22:13
justin1258 发表于 2014-8-6 15:43
交题喽~~~支持大数转换哦~~

挺好:
  1. import java.util.Scanner;

  2. public class AryConvert {
  3.         public static void main(String... args) {
  4. //                test();
  5. //                testBig();
  6.                
  7.                 AryConvertor convertor = new AryConvertor();
  8.                 convertor.setSupportBigNumber(true);// 支持大数转换
  9.                
  10.                 Scanner scanner = new Scanner(System.in);
  11.                 while (true) {
  12.                         System.out
  13.                                         .println("enter source format: b(inary), o(ctonary), d(ecimal), h(exadecimal), or ex(it) to exit.");
  14.                         int sourceFormat = getFormat(scanner);

  15.                         System.out
  16.                                         .println("enter source number you want to convert, or ex(it) to exit.");
  17.                         String number = getNumber(scanner);

  18.                         System.out
  19.                                         .println("enter destination format: b(inary), o(ctonary), d(ecimal), h(exadecimal), or ex(it) to exit.");
  20.                         int destFormat = getFormat(scanner);

  21.                         convertor.setM(sourceFormat);
  22.                         convertor.setN(destFormat);
  23.                        
  24.                         try {
  25.                                 System.out.println("the converted number: "
  26.                                                 + convertor.convertToString(number));
  27.                                
  28.                                 System.out.println();
  29.                         } catch (Exception e) {
  30.                                 System.out.println(e.getMessage());
  31.                         }
  32.                 }
  33.         }
  34.        
  35.         private static String getNumber(Scanner scanner) {
  36.                 String number = "";
  37.                 while (scanner.hasNextLine()) {
  38.                         number = scanner.nextLine();
  39.                         if("ex".compareToIgnoreCase(number) == 0)
  40.                                 System.exit(0);
  41.                        
  42.                         if(!number.matches("[0-9a-f-A-Z]+"))
  43.                                 System.out.println("you entered a wrong number. please input again.");
  44.                         else {
  45.                                 return number;
  46.                         }
  47.                 }
  48.                 return number;
  49.         }
  50.        
  51.         private static int getFormat(Scanner scanner) {
  52.                 int format = 0;
  53.                 while (scanner.hasNextLine()) {
  54.                         String enter = scanner.nextLine();
  55.                         if("b".compareToIgnoreCase(enter) == 0)
  56.                                 return 2;
  57.                         else if("o".compareToIgnoreCase(enter) == 0)
  58.                                 return 8;
  59.                         else if("d".compareToIgnoreCase(enter) == 0)
  60.                                 return 10;
  61.                         else if("h".compareToIgnoreCase(enter) == 0)
  62.                                 return 16;
  63.                         else if ("ex".compareToIgnoreCase(enter) == 0)
  64.                                 System.exit(0);
  65.                         else
  66.                                 System.out.println("you entered a wrong format. please input again.");
  67.                 }
  68.                
  69.                 return format;
  70.         }

  71.         private static void test() {
  72.                 AryConvertor convertor = new AryConvertor();
  73.                 // 转二进制测试
  74.                 System.out.println("10->2:" + "5845->" + convertor.convertToString("5845"));// 10->2
  75.                
  76.                 convertor.setM(8);
  77.                 System.out.println("8->2:" + "5745->" + convertor.convertToString("5745"));// 8->2
  78.                
  79.                 convertor.setM(16);
  80.                 System.out.println("16->2:" + "12ef3a->" + convertor.convertToString("12ef3a"));// 16->2
  81.                
  82.                 // 转八进制
  83.                 convertor.setN(8);
  84.                
  85.                 System.out.println("10->8:" + "5845->" + convertor.convertToString("5845"));// 10->8
  86.                
  87.                 convertor.setM(2);
  88.                 System.out.println("2->8:" + "1011011010101->" + convertor.convertToString("1011011010101"));// 2->8
  89.                
  90.                 convertor.setM(16);
  91.                 System.out.println("16->8:" + "12ef3a->" + convertor.convertToString("12ef3a"));// 16->8
  92.                
  93.                 // 转十进制
  94.                 convertor.setN(10);
  95.                
  96.                 convertor.setM(8);
  97.                 System.out.println("8->10:" + "13325->" + convertor.convertToString("13325"));// 8->10
  98.                
  99.                 convertor.setM(2);
  100.                 System.out.println("2->10:" + "1011011010101->" + convertor.convertToString("1011011010101"));// 2->10
  101.                
  102.                 convertor.setM(16);
  103.                 System.out.println("16->10:" + "12ef3a->" + convertor.convertToString("12ef3a"));// 16->10
  104.                
  105.                 // 转十六进制
  106.                 convertor.setN(16);
  107.                
  108.                 convertor.setM(8);
  109.                 System.out.println("8->16:" + "13375->" + convertor.convertToString("13375"));// 8->16
  110.                
  111.                 convertor.setM(2);
  112.                 System.out.println("2->16:" + "1011011010101->" + convertor.convertToString("1011011010101"));// 2->16
  113.                
  114.                 convertor.setM(10);
  115.                 System.out.println("10->16:" + "1240890->" + convertor.convertToString("1240890"));// 10->16
  116.                
  117.                
  118.                 System.out.println();
  119.         }
  120.        
  121.         private static void testBig(){
  122.                 AryConvertor convertor = new AryConvertor();
  123.                 convertor.setSupportBigNumber(true);
  124.                 // 转二进制测试
  125.                 System.out.println("10->2:" + "5845->" + convertor.convertToString("5845"));// 10->2
  126.                
  127.                 convertor.setM(8);
  128.                 System.out.println("8->2:" + "5745->" + convertor.convertToString("5745"));// 8->2
  129.                
  130.                 convertor.setM(16);
  131.                 System.out.println("16->2:" + "12ef3a->" + convertor.convertToString("12ef3a"));// 16->2
  132.                
  133.                 // 转八进制
  134.                 convertor.setN(8);
  135.                
  136.                 System.out.println("10->8:" + "5845->" + convertor.convertToString("5845"));// 10->8
  137.                
  138.                 convertor.setM(2);
  139.                 System.out.println("2->8:" + "1011011010101->" + convertor.convertToString("1011011010101"));// 2->8
  140.                
  141.                 convertor.setM(16);
  142.                 System.out.println("16->8:" + "12ef3a->" + convertor.convertToString("12ef3a"));// 16->8
  143.                
  144.                 // 转十进制
  145.                 convertor.setN(10);
  146.                
  147.                 convertor.setM(8);
  148.                 System.out.println("8->10:" + "13325->" + convertor.convertToString("13325"));// 8->10
  149.                
  150.                 convertor.setM(2);
  151.                 System.out.println("2->10:" + "1011011010101->" + convertor.convertToString("1011011010101"));// 2->10
  152.                
  153.                 convertor.setM(16);
  154.                 System.out.println("16->10:" + "12ef3a->" + convertor.convertToString("12ef3a"));// 16->10
  155.                
  156.                 // 转十六进制
  157.                 convertor.setN(16);
  158.                
  159.                 convertor.setM(8);
  160.                 System.out.println("8->16:" + "13375->" + convertor.convertToString("13375"));// 8->16
  161.                
  162.                 convertor.setM(2);
  163.                 System.out.println("2->16:" + "1011011010101->" + convertor.convertToString("1011011010101"));// 2->16
  164.                
  165.                 convertor.setM(10);
  166.                 System.out.println("10->16:" + "1240890->" + convertor.convertToString("1240890"));// 10->16
  167.                
  168.                 System.out.println();
  169.         }
  170. }

  171. class AryConvertor{
  172.         private int M = 10; // 原始数据进制,默认为十进制
  173.         private int N = 2; // 转换数据进制,默认为二进制
  174.         private boolean supportBigNumber = false;//是否支持大数,默认不支持
  175.         private String bigNumberQuotient; // 转换大数时临时存储的商数
  176.        
  177.         public void setM(int M){ this.M = M;}
  178.         public void setN(int N){ this.N = N;}
  179.         public void setSupportBigNumber(boolean supportBigNumber){this.supportBigNumber = supportBigNumber;}
  180.        
  181.         public AryConvertor(){}
  182.         public AryConvertor(int M, int N){
  183.                 this.M = M;
  184.                 this.N = N;
  185.         }
  186.        
  187.         public String convertToString(String number) {
  188.                 boolean legal = true;
  189.                 if(this.M == 2){
  190.                         legal = number.matches("[0-1]+");
  191.                 }else if (this.M == 8) {
  192.                         legal = number.matches("[0-7]+");
  193.                 }else if (this.M == 10) {
  194.                         legal = number.matches("[0-9]+");
  195.                 }else if (this.M == 16) {
  196.                         legal = number.matches("[0-9a-fA-F]+");
  197.                 }
  198.                 if(!legal)
  199.                         throw new NumberFormatException("argument number: " + number + " is Illegal");
  200.                
  201.                 if (this.M == this.N) // 如果进制相同,不转换直接返回
  202.                         return number;
  203.                
  204.                 return supportBigNumber ? convertBig(number) : convert(number);
  205.         }
  206.        
  207.         /**
  208.          * 进制转换,不支持大数
  209.          * @param number
  210.          * @return
  211.          */
  212.         private String convert(String number) {
  213.                 int tmp = 0;
  214.                 for (int i = 0; i < number.length(); i++) {
  215.                         tmp = tmp * M + getNumFromChar(number.charAt(i));
  216.                 }
  217.                
  218.                 int remainder = 0;// 余数
  219.                 int quotient = tmp; // 商
  220.                 StringBuffer result = new StringBuffer();
  221.                 do {
  222.                         remainder = quotient % N;
  223.                         result.insert(0, getCharFromNum(remainder));
  224.                         quotient = quotient / N;
  225.                 } while (quotient != 0);
  226.                
  227.                 return result.toString();
  228.         }
  229.        
  230.         /**
  231.          * 进制转换,支持大数
  232.          * @param bigNum
  233.          * @return
  234.          */
  235.         private String convertBig(String bigNum) {
  236.                 bigNumberQuotient = bigNum;
  237.                 StringBuffer result = new StringBuffer();
  238.                
  239.                 while (bigNumberQuotient.length() > 0) {
  240.                         int remainder = getRemainderFromBigNum(bigNumberQuotient);
  241.                         result.insert(0, getCharFromNum(remainder));
  242.                 }
  243.                
  244.                 return result.toString();
  245.         }
  246.        
  247.         /**
  248.          * 从一个大数字符串中获取除以N的余数
  249.          * @param bigNum
  250.          * @return
  251.          */
  252.         private int getRemainderFromBigNum(String bigNum) {
  253. //                StringBuffer dividend = new StringBuffer(bigNum);// 字符串形式的被除数
  254.                
  255.                 StringBuffer quotient = new StringBuffer();
  256.                 int remainder = 0;
  257.                 for (int i = 0; i < bigNum.length(); i++) {
  258.                         int tmp = getNumFromChar(bigNum.charAt(i));
  259.                         remainder = remainder * M + tmp;
  260.                         quotient.append(getCharFromNum(remainder / N));
  261.                         remainder = remainder % N;
  262.                 }
  263.                
  264.                 while (quotient.length() > 0 && quotient.charAt(0) == '0') {
  265.                         quotient.deleteCharAt(0);
  266.                 }
  267.                
  268.                 bigNumberQuotient = quotient.toString();
  269.                
  270.                 return remainder;
  271.         }
  272.        
  273.         /***
  274.          * 根据传进来的字符串1-9,a-z,A-Z转换成对应的十进制数
  275.          * @param cnum
  276.          * @return
  277.          */
  278.         private static int getNumFromChar(char cnum) {
  279.                 if(cnum >= '0' && cnum <= '9')
  280.                         return cnum - '0';
  281.                 else if (cnum >= 'a' && cnum <= 'f')
  282.                         return cnum - 'a' + 10;
  283.                 else if (cnum >= 'A' && cnum <= 'F')
  284.                         return cnum - 'A' + 10;
  285.                 else
  286.                         throw new NumberFormatException("argument cnum: " + cnum + " is Illegal");
  287.         }
  288.        
  289.         /**
  290.          * 根据传进来的数字0-15转换成相应的字符表示
  291.          * @param num
  292.          * @return
  293.          */
  294.         private static char getCharFromNum(int num) {
  295.                 if(num >= 0 && num <= 9)
  296.                         return (char)(num + '0');
  297.                 else if (num >= 10 && num <= 15)
  298.                         return (char)(num - 10 + 'a');
  299.                 else
  300.                         throw new IllegalArgumentException("argument num: " + num + " is Illegal");
  301.         }

  302. }
复制代码

作者: 王震阳老师    时间: 2014-8-8 22:14
沟门大杏 发表于 2014-8-6 15:54
阳哥请看

挺好:
  1. package com.itheima;

  2. import java.awt.*;

  3. import java.awt.event.*;

  4. import javax.swing.*;

  5. public class Test2 extends JFrame implements ActionListener {

  6. JTextField txtDec;

  7. JTextField txtBin;

  8. JTextField txtOct;

  9. JTextField txtHex;



  10. public Test2(){

  11. super("十进制整数转换");

  12. txtDec = new JTextField(15);

  13. txtBin = new JTextField(15);

  14. txtOct = new JTextField(15);

  15. txtHex = new JTextField(15);

  16. txtBin.setEditable(false);

  17. txtOct.setEditable(false);

  18. txtHex.setEditable(false);

  19. this.setLayout(new FlowLayout());

  20. this.add(new JLabel("    十进制"));

  21. this.add(txtDec);

  22. this.add(new JLabel("    二进制"));

  23. this.add(txtBin);

  24. this.add(new JLabel("    八进制"));

  25. this.add(txtOct);

  26. this.add(new JLabel("十六进制"));

  27. this.add(txtHex);

  28. txtDec.addActionListener(this);

  29. this.setSize(250, 150);

  30. this.setResizable(false);

  31. this.setVisible(true);

  32. }



  33. public static void main(String[] args) {

  34. new Test2();

  35. }

  36. public void actionPerformed(ActionEvent e) {

  37. JTextField txt = (JTextField)e.getSource();

  38. if(txt.getText() == null || txt.getText().trim().equals("")){

  39. JOptionPane.showMessageDialog(this, "十进制数不能为空");

  40. return;

  41. }

  42. int num;

  43. try{

  44. num = Integer.parseInt(txt.getText());

  45. if(num < 0){

  46. num *= -1;

  47. txtBin.setText("-" + Convert.format(num, 2));

  48. txtOct.setText("-" + Convert.format(num, 8));

  49. txtHex.setText("-" + Convert.format(num, 16));

  50. }

  51. else{

  52. txtBin.setText(Convert.format(num, 2));

  53. txtOct.setText(Convert.format(num, 8));

  54. txtHex.setText(Convert.format(num, 16));

  55. }

  56. }

  57. catch(Exception ex){

  58. JOptionPane.showMessageDialog(this, "十进制数错误");

  59. return;

  60. }

  61. }

  62. }

  63. class Convert{

  64. private static String[] bins = {"0", "1"};

  65. private static String[] octs = {"0", "1", "2", "3", "4", "5", "6", "7"};

  66. private static String[] hexs = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};



  67. public static String format(int num, int r){

  68. StringBuffer buff = new StringBuffer();

  69. if(r == 2){

  70. while(num > 0){

  71. buff.append(bins[num%r]);

  72. num /= r;

  73. }

  74. }

  75. else if(r == 8){

  76. while(num > 0){

  77. buff.append(octs[num%r]);

  78. num /= r;

  79. }

  80. }

  81. else if(r == 16){

  82. while(num > 0){

  83. buff.append(hexs[num%r]);

  84. num /= r;

  85. }

  86. }

  87. buff.reverse();

  88. return buff.toString();

  89. }

  90. }
复制代码

作者: huoshao008    时间: 2014-8-8 23:04
huoshao008 发表于 2014-8-7 20:28
满足基本要求,不足之处请务必指正谢谢.

谢谢老师,下次一定注意.
作者: 阿温    时间: 2014-8-9 00:16
就业指导-王震阳老师 发表于 2014-8-8 22:02
给你公布出去,无法给满分是因为进制转换没有用自定义算法,而是调用的API。
...

恩,知道了,谢谢阳哥
作者: 杜工    时间: 2014-8-9 05:59
现在还搞不定。
作者: ﹑淼    时间: 2014-8-9 12:19
请放开你手中的题
作者: yueyouqiang    时间: 2014-8-9 19:05
yueyouqiang 发表于 2014-8-6 15:15
没有做完整啊

嗯嗯,知道了。老师,谢谢。
作者: 左脑想你    时间: 2014-8-9 20:43
现在看不晚吧
作者: Fengs    时间: 2014-8-10 16:35
看一下来




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