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

编程题:

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

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里的字符赋给数组arrays
			Scanner input=new Scanner(System.in);
			System.out.println("请输入需要转化的16进制数(应输入0-9或a-z或A-Z中的字符):");
			str=input.next();
			arrays=str.toCharArray();
			//将数组倒转
			swap(arrays);
			//一个字符一个字符地辨认,并将值赋给数组num
			for(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();	
	}

}

测试截屏:


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值