本帖最后由 我叫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);
- }
- }
- }
复制代码 不完善的地方就是:并对转换失败的原因要区分出是数字太大,这个地方该怎么处理
抛的异常好像会出现很多,但如何专门来控制数字太大这个异常,我不想因为数字过大而让程序停止运行,这样有办法吗?
|