A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 我叫MT 于 2014-3-28 18:16 编辑

编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。提示:十进制数转二进制数的方式是用这个数除以2,余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2,这次得到的余数就是次低位,如此循环,直到被除数为0为止。其实,只要明白了打印出一个十进制数的每一位的方式(不断除以10,得到的余数就分别是个位,十位,百位),就很容易理解十进制数转二进制数的这种方式

  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;

  4. public class Demo{
  5.         public static void main(String[] args){
  6.                 System.out.println("请输入你要转换为二进制的数字");
  7.                 try {
  8.                         BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  9.                         String line = null;
  10.                         while((line=bufr.readLine())!=null){
  11.                                 //对读取到的数据判断此字符串是否匹配给定的正则表达式
  12.                                 if(line.matches("\\d+")){
  13.                                         //如果匹配给定的正则表达式则把字符串转为数字//这里可能会发生异常,因为可能传入的数值会超出int的取值范围
  14.                                         int number = Integer.parseInt(line);
  15.                                         System.out.print("你输入的数字是"+number+"我为你转换二进制的结果为:");
  16.                                         //调用自定义的转换方法并向方法中传入要转换的数字
  17.                                         change(number);
  18.                                         System.out.println();//换行,在打印完二进制后没有换行,为确保再次输入在打印二进制完后的下一行
  19.                                 }else
  20.                                         System.out.println("输入有误!请重新输入正确合法的数字!");
  21.                         }
  22.                 } catch (Exception e) {//处理异常
  23.                         throw new RuntimeException("异常-->你输入的数字已经超出了合法的取值范围!");
  24.                 }
  25.         }
  26.         //使用递归进行打印二进制数字
  27.         public static void change(int number){
  28.                 if(number>0){
  29.                         change(number/2);
  30.                         System.out.print(number%2);
  31.                 }
  32.         }
  33. }
复制代码
不完善的地方就是:并对转换失败的原因要区分出是数字太大,这个地方该怎么处理
抛的异常好像会出现很多,但如何专门来控制数字太大这个异常,我不想因为数字过大而让程序停止运行,这样有办法吗?


评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

1 个回复

倒序浏览
然后在正则表达式中限定出现的次数。然后可以使用你输入的字符与int的范围进行比较-2147483648<=  <=2147483647 将此范围也封装成字符串根据返回结果进行操作。我没有试过,不知道行不行。个人观点。

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马