黑马程序员技术交流社区
标题:
有一道题我觉得做的不够完善,具体不完善看一下内容
[打印本页]
作者:
我叫MT
时间:
2014-3-26 16:48
标题:
有一道题我觉得做的不够完善,具体不完善看一下内容
本帖最后由 我叫MT 于 2014-3-28 18:16 编辑
编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。提示:十进制数转二进制数的方式是用这个数除以2,余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2,这次得到的余数就是次低位,如此循环,直到被除数为0为止。其实,只要明白了打印出一个十进制数的每一位的方式(不断除以10,得到的余数就分别是个位,十位,百位),就很容易理解十进制数转二进制数的这种方式
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Demo{
public static void main(String[] args){
System.out.println("请输入你要转换为二进制的数字");
try {
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while((line=bufr.readLine())!=null){
//对读取到的数据判断此字符串是否匹配给定的正则表达式
if(line.matches("\\d+")){
//如果匹配给定的正则表达式则把字符串转为数字//这里可能会发生异常,因为可能传入的数值会超出int的取值范围
int number = Integer.parseInt(line);
System.out.print("你输入的数字是"+number+"我为你转换二进制的结果为:");
//调用自定义的转换方法并向方法中传入要转换的数字
change(number);
System.out.println();//换行,在打印完二进制后没有换行,为确保再次输入在打印二进制完后的下一行
}else
System.out.println("输入有误!请重新输入正确合法的数字!");
}
} catch (Exception e) {//处理异常
throw new RuntimeException("异常-->你输入的数字已经超出了合法的取值范围!");
}
}
//使用递归进行打印二进制数字
public static void change(int number){
if(number>0){
change(number/2);
System.out.print(number%2);
}
}
}
复制代码
不完善的地方就是:并对转换失败的原因要区分出是数字太大,这个地方该怎么处理
抛的异常好像会出现很多,但如何专门来控制数字太大这个异常,我不想因为数字过大而让程序停止运行,这样有办法吗?
作者:
无道
时间:
2014-3-26 18:03
然后在正则表达式中限定出现的次数。然后可以使用你输入的字符与int的范围进行比较-2147483648<= <=2147483647 将此范围也封装成字符串根据返回结果进行操作。我没有试过,不知道行不行。个人观点。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2