java学习——97.进制间的转换
这两个星期被各种杂事充斥了生活,不过,生活,本来就是充满了波折,波折也是一种成长,希望我能继续成长下去。
今天要写的是进制间的转换。
其实这是一个很简单的题目,现在大学里就算是非计算机专业,也会有一门计算机的公共课,入门必讲,计算机是由二进制组成,除了二进制之外,还有八进制、十六进制来辅助,而我们人类呢,用的是十进制。
有确定的方法来进行各种进制之间的转换,那么如何用Java来实现,今天介绍的是其他进制转换成十进制整数。
题目:从键盘输入一串字符串,将其转换为对应的整数输出。
其完整代码如下:
其具体的含义请详见注释。
import java.util.*;
public class Stringlearn {
public static int parseInt(String s) throws NumberFormatException
{
char ch=s.charAt(0); //获得字符串的首字符,识别进制。
int value=0, i=0, sign=1,radix=10; //value为十进制的值,i为字符串的序号,sign为符号,radix表示几进制,默认为十进制
if (ch>='1' && ch<='9' || ch=='+' || ch=='-'||(ch=='0'&&s.length==1)) //判断是否十进制,十进制的判断条件是当第一位为1~9之间的数字,或者第一位为符号为表示正数或负数,或者就是单纯的数字0
{
if (ch=='+' || ch=='-')
i++;
sign = ch=='-' ? -1 : 1; //此三元运算符用来确定符号位
}
else if (ch=='0' &&s.charAt(1)!='x') //判断是否为八进制,八进制以0开头
{ radix=8;
i++;
}
else if (ch=='0' &&s.charAt(1)=='x') //判断是澡为十六进制,以0x开头
{ radix=16;
i+=2;
}
else throw new NumberFormatException("整数不能识别\'"+ch+"\'字符");
System.out.println("您输入的:"+s+"是"+radix+"进制数"); //输出判断的结果到底为几进制
while (i<s.length())//循环计算其对应的整数值
ch=s.charAt(i++);
if (ch>='0' && ch-'0'<radix)
value =value*radix+ch-'0'; //value记住当前获得的整数值
elseif (radix==16 &&ch>='a' && ch<='f')
value =value*radix+ch-'a'+10; //十六进制还需要转换'a'~'f'表示的整数值
elseif (radix==16 &&ch>='A' && ch<='F')
value =value*radix+ch-'A'+10;
elsethrownewNumberFormatException(radix+"进制整数不能识别'"+ch+"\'字符");
}
return value*sign; //返回有符号整数值
}
public static void main(String args[]){
while(true){
System.out.print("请输入数据:");
Scanner scan=new Scanner(System.in);
String s=scan.nextLine();
int n=parseInt(s);
System.out.println("转换为十进制数为:"+n);
}
}
}
其运行结果如下: