黑马程序员技术交流社区
标题:
将键盘输入的字符串转成数字再转成二进制数
[打印本页]
作者:
Kikyou
时间:
2014-8-28 07:24
标题:
将键盘输入的字符串转成数字再转成二进制数
编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。提示:十进制数转二进制数的方式是用这个数除以2,余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2,这次得到的余数就是次低位,如此循环,直到被除数为0为止。其实,只要明白了打印出一个十进制数的每一位的方式(不断除以10,得到的余数就分别是个位,十位,百位),就很容易理解十进制数转二进制数的这种方式。
public class Test9 {
public static void main(String[] args){
System.out.println("请输入一个非负的整数,按回车确认!输入esc或者ESC结束!");
//死循环,可以多次输入数字转换二进制
while(true){
try {
//创建输入流,准备读取用户输入的字符串
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//定义临时变量,记录每一次用户输入需要转换的字符串
String temp = null;
//读取用户输入的内容
if ((temp = br.readLine()) != null) {
//当用户输入esc或者ESC的时候,关闭输入流
if ("esc".equalsIgnoreCase(temp)) {
br.close();
return;
}
//首先调用isValidNum()方法,判断用户输入的是否是一个合法的数字(这里只考虑正整数)
if (isValidNum(temp)) {
//将用户输入的字符串转换为数字
Integer num = Integer.valueOf(temp);
//调用toBinary()方法将数字转换为二进制的数,并打印输出
System.out.println(num + "的二进制数是:" + toBinary(num));
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*
* 判断一个字符串是否为正整数
*/
public static boolean isValidNum(String num){
//判断用户输入的字符是否为
if (!num.isEmpty()) {
//用正则表达式判断用户输入的是否是全数字
if (num.matches("\\d+")) {
try{
//捕捉异常,当有异常时说明用户输入的数字超过int类型的最大
Integer.valueOf(num);
return true;
}catch (NumberFormatException e){
System.out.println("您输入的数字已经超过int的最大值");
return false;
}
}else{
System.out.println("您输入的字符中包含非数字字符");
return false;
}
}else{
System.out.println("未检测到字符");
return false;
}
}
/*
* 获取一个正整数的二进制数
*/
private static StringBuilder toBinary(Integer num) {
//创建一个StringBuilder对象来存放num每一次和2求余的值
StringBuilder sb = new StringBuilder();
//循环求num和2相除的余,并将余数添加到sb中
while(num != 0){
int temp= num % 2;
num /= 2;
sb.append(temp);
}
//先求出来的余数是二进制的最低位,所以需要反转一下
sb.reverse();
return sb;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2