编程题:
先从键盘输入一个十六进制数,再将其转化为十进制数,然后输出。若输入的不是一个有效的十六进制数,则抛出异常。
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();
}
}
测试截屏: