黑马程序员技术交流社区
标题: 【阳哥专栏】技术分活动第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
坏了,我逗比了,我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
挺好:
- import java.util.*;
- class Transition
- {
- public static void main(String[] args)
- {
- //x:表示初始的进制数。y:表示转换成的进制数。
- int x, y;
- int num; //num:表示用户输入的数据转换为int类型的值。
- boolean flag = true; // flag:用于控制用户是否要进行下一轮数据的转换。
- while(flag)
- {
- flag = false;
- System.out.println("请输入您输入的数据是几进制的:如:2,8,10或是16:");
- x = input();
- x = judge(x);
- System.out.println("请输入您想要转换进制的数:");
- num = input(x);
- System.out.println("请输入您想要将数据转换成几进制:如:2,8,10或16");
- y = input();
- y = judge(y);
- zhuanHuan(num,x,y);
- System.out.println("您是否想进行下一次数据转换?是请输入:yes,否则输入:no");
- flag = goOn();
- }
- }
- //goOn():根据用户输入yes或no改变flag的值。
- public static boolean goOn()
- {
- Scanner s = new Scanner(System.in);
- String str = s.next();
- if(str.equals("yes")) return true;
- else if(str.equals("no")) return false;
- else
- {
- System.out.println("您输入的格式不正确,请输入yes或者是no。");
- goOn();
- }
- }
- //input():用于接收用户输入的进制数。
- public static int input()
- {
- Scanner s = new Scanner(System.in);
- String str = s.next();
- int temp = Integer.parseInt(str);
- return temp;
- }
- //judge():用于判断进制输入是否正确。
- public static int judge(int n)
- {
- switch(n)
- {
- case 2: return n;
- case 8: return n;
- case 10: return n;
- case 16: return n;
- default:
- {
- System.out.println("您输入的进制不正确,您只能输入2,8,10或者16。请重新输入:");
- n = input();
- n = judge(n);
- return n;
- }
- }
- }
- //input(int x):用于接收用户输入的数据,并将它转换为十进制数。
- public static int input(int x)
- {
- Scanner s = new Scanner(System.in);
- String str = s.next();
- int temp = 0;
- try
- {
- temp = Integer.parseInt(str,x);
-
- }
- catch (NumberFormatException e)
- {
- System.out.println("您输入的数据格式不正确,请输入正确的数据格式:");
- temp = input(x);
- }
- return temp;
- }
-
- //zhuanHuan方法:根据要转换成的进制数去调用相应的转换函数。
- public static void zhuanHuan(int num, int x, int y)
- {
- switch(y)
- {
- case 2: toBin(num,x); break;
-
- case 8: toOct(num,x); break;
-
- case 10:
- {
- System.out.println(num+"的十进制形式是:" +num);
- break;
- }
- case 16: toHex(num,x); break;
-
-
- }
- }
- //下面这三个方法分别转换成相应的进制。
- public static void toBin(int num,int x)
- {
- System.out.print("您输入的"+x+"进制数的二进制形式是:");
- trans(num,1,1);
- }
- public static void toOct(int num,int x)
- {
- System.out.print("您输入的"+x+"进制数的八进制形式是:");
- trans(num,7,3);
- }
- public static void toHex(int num,int x)
- {
- System.out.print("您输入的"+x+"进制数的十六进制形式是:");
- trans(num,15,4);
- }
-
-
- //trans():上边三个进制转换函数调用这个方法就可以完成进制的转换。
- 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','F'};
- char[] arr = new char[32];
- int pos = arr.length;
- while(num != 0)
- {
- int temp = num & base;
- arr[--pos] = chs[temp];
- num = num >>> offset;
- }
- for(int i = pos; i < arr.length; i++)
- {
- System.out.print(arr[i]);
- }
- System.out.println();
- System.out.println();
- }
- }
复制代码
作者: 王震阳老师 时间: 2014-8-8 22:02
给你公布出去,无法给满分是因为进制转换没有用自定义算法,而是调用的API。
作者: 王震阳老师 时间: 2014-8-8 22:13
挺好:
- import java.util.Scanner;
- public class AryConvert {
- public static void main(String... args) {
- // test();
- // testBig();
-
- AryConvertor convertor = new AryConvertor();
- convertor.setSupportBigNumber(true);// 支持大数转换
-
- Scanner scanner = new Scanner(System.in);
- while (true) {
- System.out
- .println("enter source format: b(inary), o(ctonary), d(ecimal), h(exadecimal), or ex(it) to exit.");
- int sourceFormat = getFormat(scanner);
- System.out
- .println("enter source number you want to convert, or ex(it) to exit.");
- String number = getNumber(scanner);
- System.out
- .println("enter destination format: b(inary), o(ctonary), d(ecimal), h(exadecimal), or ex(it) to exit.");
- int destFormat = getFormat(scanner);
- convertor.setM(sourceFormat);
- convertor.setN(destFormat);
-
- try {
- System.out.println("the converted number: "
- + convertor.convertToString(number));
-
- System.out.println();
- } catch (Exception e) {
- System.out.println(e.getMessage());
- }
- }
- }
-
- private static String getNumber(Scanner scanner) {
- String number = "";
- while (scanner.hasNextLine()) {
- number = scanner.nextLine();
- if("ex".compareToIgnoreCase(number) == 0)
- System.exit(0);
-
- if(!number.matches("[0-9a-f-A-Z]+"))
- System.out.println("you entered a wrong number. please input again.");
- else {
- return number;
- }
- }
- return number;
- }
-
- private static int getFormat(Scanner scanner) {
- int format = 0;
- while (scanner.hasNextLine()) {
- String enter = scanner.nextLine();
- if("b".compareToIgnoreCase(enter) == 0)
- return 2;
- else if("o".compareToIgnoreCase(enter) == 0)
- return 8;
- else if("d".compareToIgnoreCase(enter) == 0)
- return 10;
- else if("h".compareToIgnoreCase(enter) == 0)
- return 16;
- else if ("ex".compareToIgnoreCase(enter) == 0)
- System.exit(0);
- else
- System.out.println("you entered a wrong format. please input again.");
- }
-
- return format;
- }
- private static void test() {
- AryConvertor convertor = new AryConvertor();
- // 转二进制测试
- System.out.println("10->2:" + "5845->" + convertor.convertToString("5845"));// 10->2
-
- convertor.setM(8);
- System.out.println("8->2:" + "5745->" + convertor.convertToString("5745"));// 8->2
-
- convertor.setM(16);
- System.out.println("16->2:" + "12ef3a->" + convertor.convertToString("12ef3a"));// 16->2
-
- // 转八进制
- convertor.setN(8);
-
- System.out.println("10->8:" + "5845->" + convertor.convertToString("5845"));// 10->8
-
- convertor.setM(2);
- System.out.println("2->8:" + "1011011010101->" + convertor.convertToString("1011011010101"));// 2->8
-
- convertor.setM(16);
- System.out.println("16->8:" + "12ef3a->" + convertor.convertToString("12ef3a"));// 16->8
-
- // 转十进制
- convertor.setN(10);
-
- convertor.setM(8);
- System.out.println("8->10:" + "13325->" + convertor.convertToString("13325"));// 8->10
-
- convertor.setM(2);
- System.out.println("2->10:" + "1011011010101->" + convertor.convertToString("1011011010101"));// 2->10
-
- convertor.setM(16);
- System.out.println("16->10:" + "12ef3a->" + convertor.convertToString("12ef3a"));// 16->10
-
- // 转十六进制
- convertor.setN(16);
-
- convertor.setM(8);
- System.out.println("8->16:" + "13375->" + convertor.convertToString("13375"));// 8->16
-
- convertor.setM(2);
- System.out.println("2->16:" + "1011011010101->" + convertor.convertToString("1011011010101"));// 2->16
-
- convertor.setM(10);
- System.out.println("10->16:" + "1240890->" + convertor.convertToString("1240890"));// 10->16
-
-
- System.out.println();
- }
-
- private static void testBig(){
- AryConvertor convertor = new AryConvertor();
- convertor.setSupportBigNumber(true);
- // 转二进制测试
- System.out.println("10->2:" + "5845->" + convertor.convertToString("5845"));// 10->2
-
- convertor.setM(8);
- System.out.println("8->2:" + "5745->" + convertor.convertToString("5745"));// 8->2
-
- convertor.setM(16);
- System.out.println("16->2:" + "12ef3a->" + convertor.convertToString("12ef3a"));// 16->2
-
- // 转八进制
- convertor.setN(8);
-
- System.out.println("10->8:" + "5845->" + convertor.convertToString("5845"));// 10->8
-
- convertor.setM(2);
- System.out.println("2->8:" + "1011011010101->" + convertor.convertToString("1011011010101"));// 2->8
-
- convertor.setM(16);
- System.out.println("16->8:" + "12ef3a->" + convertor.convertToString("12ef3a"));// 16->8
-
- // 转十进制
- convertor.setN(10);
-
- convertor.setM(8);
- System.out.println("8->10:" + "13325->" + convertor.convertToString("13325"));// 8->10
-
- convertor.setM(2);
- System.out.println("2->10:" + "1011011010101->" + convertor.convertToString("1011011010101"));// 2->10
-
- convertor.setM(16);
- System.out.println("16->10:" + "12ef3a->" + convertor.convertToString("12ef3a"));// 16->10
-
- // 转十六进制
- convertor.setN(16);
-
- convertor.setM(8);
- System.out.println("8->16:" + "13375->" + convertor.convertToString("13375"));// 8->16
-
- convertor.setM(2);
- System.out.println("2->16:" + "1011011010101->" + convertor.convertToString("1011011010101"));// 2->16
-
- convertor.setM(10);
- System.out.println("10->16:" + "1240890->" + convertor.convertToString("1240890"));// 10->16
-
- System.out.println();
- }
- }
- class AryConvertor{
- private int M = 10; // 原始数据进制,默认为十进制
- private int N = 2; // 转换数据进制,默认为二进制
- private boolean supportBigNumber = false;//是否支持大数,默认不支持
- private String bigNumberQuotient; // 转换大数时临时存储的商数
-
- public void setM(int M){ this.M = M;}
- public void setN(int N){ this.N = N;}
- public void setSupportBigNumber(boolean supportBigNumber){this.supportBigNumber = supportBigNumber;}
-
- public AryConvertor(){}
- public AryConvertor(int M, int N){
- this.M = M;
- this.N = N;
- }
-
- public String convertToString(String number) {
- boolean legal = true;
- if(this.M == 2){
- legal = number.matches("[0-1]+");
- }else if (this.M == 8) {
- legal = number.matches("[0-7]+");
- }else if (this.M == 10) {
- legal = number.matches("[0-9]+");
- }else if (this.M == 16) {
- legal = number.matches("[0-9a-fA-F]+");
- }
- if(!legal)
- throw new NumberFormatException("argument number: " + number + " is Illegal");
-
- if (this.M == this.N) // 如果进制相同,不转换直接返回
- return number;
-
- return supportBigNumber ? convertBig(number) : convert(number);
- }
-
- /**
- * 进制转换,不支持大数
- * @param number
- * @return
- */
- private String convert(String number) {
- int tmp = 0;
- for (int i = 0; i < number.length(); i++) {
- tmp = tmp * M + getNumFromChar(number.charAt(i));
- }
-
- int remainder = 0;// 余数
- int quotient = tmp; // 商
- StringBuffer result = new StringBuffer();
- do {
- remainder = quotient % N;
- result.insert(0, getCharFromNum(remainder));
- quotient = quotient / N;
- } while (quotient != 0);
-
- return result.toString();
- }
-
- /**
- * 进制转换,支持大数
- * @param bigNum
- * @return
- */
- private String convertBig(String bigNum) {
- bigNumberQuotient = bigNum;
- StringBuffer result = new StringBuffer();
-
- while (bigNumberQuotient.length() > 0) {
- int remainder = getRemainderFromBigNum(bigNumberQuotient);
- result.insert(0, getCharFromNum(remainder));
- }
-
- return result.toString();
- }
-
- /**
- * 从一个大数字符串中获取除以N的余数
- * @param bigNum
- * @return
- */
- private int getRemainderFromBigNum(String bigNum) {
- // StringBuffer dividend = new StringBuffer(bigNum);// 字符串形式的被除数
-
- StringBuffer quotient = new StringBuffer();
- int remainder = 0;
- for (int i = 0; i < bigNum.length(); i++) {
- int tmp = getNumFromChar(bigNum.charAt(i));
- remainder = remainder * M + tmp;
- quotient.append(getCharFromNum(remainder / N));
- remainder = remainder % N;
- }
-
- while (quotient.length() > 0 && quotient.charAt(0) == '0') {
- quotient.deleteCharAt(0);
- }
-
- bigNumberQuotient = quotient.toString();
-
- return remainder;
- }
-
- /***
- * 根据传进来的字符串1-9,a-z,A-Z转换成对应的十进制数
- * @param cnum
- * @return
- */
- private static int getNumFromChar(char cnum) {
- if(cnum >= '0' && cnum <= '9')
- return cnum - '0';
- else if (cnum >= 'a' && cnum <= 'f')
- return cnum - 'a' + 10;
- else if (cnum >= 'A' && cnum <= 'F')
- return cnum - 'A' + 10;
- else
- throw new NumberFormatException("argument cnum: " + cnum + " is Illegal");
- }
-
- /**
- * 根据传进来的数字0-15转换成相应的字符表示
- * @param num
- * @return
- */
- private static char getCharFromNum(int num) {
- if(num >= 0 && num <= 9)
- return (char)(num + '0');
- else if (num >= 10 && num <= 15)
- return (char)(num - 10 + 'a');
- else
- throw new IllegalArgumentException("argument num: " + num + " is Illegal");
- }
- }
复制代码
作者: 王震阳老师 时间: 2014-8-8 22:14
挺好:
- package com.itheima;
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- public class Test2 extends JFrame implements ActionListener {
- JTextField txtDec;
- JTextField txtBin;
- JTextField txtOct;
- JTextField txtHex;
-
- public Test2(){
- super("十进制整数转换");
- txtDec = new JTextField(15);
- txtBin = new JTextField(15);
- txtOct = new JTextField(15);
- txtHex = new JTextField(15);
- txtBin.setEditable(false);
- txtOct.setEditable(false);
- txtHex.setEditable(false);
- this.setLayout(new FlowLayout());
- this.add(new JLabel(" 十进制"));
- this.add(txtDec);
- this.add(new JLabel(" 二进制"));
- this.add(txtBin);
- this.add(new JLabel(" 八进制"));
- this.add(txtOct);
- this.add(new JLabel("十六进制"));
- this.add(txtHex);
- txtDec.addActionListener(this);
- this.setSize(250, 150);
- this.setResizable(false);
- this.setVisible(true);
- }
-
- public static void main(String[] args) {
- new Test2();
- }
- public void actionPerformed(ActionEvent e) {
- JTextField txt = (JTextField)e.getSource();
- if(txt.getText() == null || txt.getText().trim().equals("")){
- JOptionPane.showMessageDialog(this, "十进制数不能为空");
- return;
- }
- int num;
- try{
- num = Integer.parseInt(txt.getText());
- if(num < 0){
- num *= -1;
- txtBin.setText("-" + Convert.format(num, 2));
- txtOct.setText("-" + Convert.format(num, 8));
- txtHex.setText("-" + Convert.format(num, 16));
- }
- else{
- txtBin.setText(Convert.format(num, 2));
- txtOct.setText(Convert.format(num, 8));
- txtHex.setText(Convert.format(num, 16));
- }
- }
- catch(Exception ex){
- JOptionPane.showMessageDialog(this, "十进制数错误");
- return;
- }
- }
- }
- class Convert{
- private static String[] bins = {"0", "1"};
- private static String[] octs = {"0", "1", "2", "3", "4", "5", "6", "7"};
- private static String[] hexs = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
-
- public static String format(int num, int r){
- StringBuffer buff = new StringBuffer();
- if(r == 2){
- while(num > 0){
- buff.append(bins[num%r]);
- num /= r;
- }
- }
- else if(r == 8){
- while(num > 0){
- buff.append(octs[num%r]);
- num /= r;
- }
- }
- else if(r == 16){
- while(num > 0){
- buff.append(hexs[num%r]);
- num /= r;
- }
- }
- buff.reverse();
- return buff.toString();
- }
- }
复制代码
作者: huoshao008 时间: 2014-8-8 23:04
谢谢老师,下次一定注意.
作者: 阿温 时间: 2014-8-9 00:16
恩,知道了,谢谢阳哥
作者: 杜工 时间: 2014-8-9 05:59
现在还搞不定。
作者: ﹑淼 时间: 2014-8-9 12:19
请放开你手中的题
作者: yueyouqiang 时间: 2014-8-9 19:05
嗯嗯,知道了。老师,谢谢。
作者: 左脑想你 时间: 2014-8-9 20:43
现在看不晚吧
作者: Fengs 时间: 2014-8-10 16:35
看一下来
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |