十六进制转十进制,并进行异常检测

来源:互联网 发布:笔记本拍照软件 编辑:程序博客网 时间:2024/05/16 10:50

编程题:

        先从键盘输入一个十六进制数,再将其转化为十进制数,然后输出。若输入的不是一个有效的十六进制数,则抛出异常。

1  转化类

/** *  */package Convert;import java.util.Scanner;/** * @author HuangRong * date:2013/10/27 * function:(1)对输入的字符串进行十六进制到十进制的转化过程 *           (2)若输入的字符串中有非0-9或a-z或A-Z中的字符,则抛出异常 */public class AchieveConvert {//存放字符串的数组private char []arrays;String str;//存放将字符串转化成整数后的数组int []num=new int [10];//存放最终结果int result=0;int m=0;int i;  public void convert(){try{//将str里的字符赋给数组arraysScanner input=new Scanner(System.in);System.out.println("请输入需要转化的16进制数(应输入0-9或a-z或A-Z中的字符):");str=input.next();arrays=str.toCharArray();//将数组倒转swap(arrays);//一个字符一个字符地辨认,并将值赋给数组numfor(char ch:arrays){num[m++]=recognize(ch);} //所得结果相加for(i=str.length();i>0;i--,m--){//相应位置进行转化,结果相加result+=num[i-1]*Math.pow(16, (i-1));}System.out.println("转化成十进制后的数为:");System.out.println(result);}catch(MyException e){System.out.println(e.toString());}}//将单个字符转化为整数public int recognize(char a) throws MyException{int m=0;if(a<48||a>57&a!='a'&a!='b'&a!='c'&a!='d'&a!='e'&a!='f'&a!='A'&a!='B'&a!='C'&a!='D'&a!='E'&a!='F'){throw new MyException(a);}else{switch(a){case '1':m=1;break;case '2':m=2;break;case '3':m=3;break;case '4':m=4;break;case '5':m=5;break;case '6':m=6;break;case '7':m=7;break;case '8':m=8;break;case '9':m=9;break;case 'a':case 'A':m=10;break;case 'b':case 'B':m=11;break;case 'c':case 'C':m=12;break;case 'd':case 'D':m=13;break;case 'e':case 'E':m=14;break;case 'f':case 'F':m=15;break;default:System.out.println("error");break;}}return m;}//翻转数组中的字符串public static void swap(char strs[]){for(int i=0;i<strs.length/2;i++){char temp=strs[i];strs[i]=strs[strs.length-1-i];strs[strs.length-1-i]=temp;}}}


2 异常检测类

/** *  */package Convert;/** * @author HuangRong * date:2013/10/27 * function: 对输入的字符串中的字符进行检测的异常类 * */public class MyException extends Exception{String msg;public MyException(char m){msg="十六进制数中的"+m+"字符输入不合理";}public String toString(){return msg;}}


3 测试类

/** *  */package Convert;/** * @author HuangRong * date:2013/10/27 * */public class Text {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub    AchieveConvert achieve=new AchieveConvert();achieve.convert();}}

测试截屏: