这两个星期被各种杂事充斥了生活,不过,生活,本来就是充满了波折,波折也是一种成长,希望我能继续成长下去。 今天要写的是进制间的转换。 其实这是一个很简单的题目,现在大学里就算是非计算机专业,也会有一门计算机的公共课,入门必讲,计算机是由二进制组成,除了二进制之外,还有八进制、十六进制来辅助,而我们人类呢,用的是十进制。 有确定的方法来进行各种进制之间的转换,那么如何用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); } } } 其运行结果如下: |
|
来自: pythonjava学习 > 《待分类》