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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。提示:十进制数转二进制数的方式是用这个数除以2,余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2,这次得到的余数就是次低位,如此循环,直到被除数为0为止。其实,只要明白了打印出一个十进制数的每一位的方式(不断除以10,得到的余数就分别是个位,十位,百位),就很容易理解十进制数转二进制数的这种方式。
  1. public class Test9 {
  2.         public static void main(String[] args){
  3.                 System.out.println("请输入一个非负的整数,按回车确认!输入esc或者ESC结束!");
  4.                 //死循环,可以多次输入数字转换二进制
  5.                 while(true){
  6.                         try {
  7.                                 //创建输入流,准备读取用户输入的字符串
  8.                                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  9.                                 //定义临时变量,记录每一次用户输入需要转换的字符串
  10.                                 String temp = null;
  11.                                 //读取用户输入的内容
  12.                                 if ((temp = br.readLine()) != null) {
  13.                                         //当用户输入esc或者ESC的时候,关闭输入流
  14.                                         if ("esc".equalsIgnoreCase(temp)) {
  15.                                                 br.close();
  16.                                                 return;
  17.                                         }
  18.                                         //首先调用isValidNum()方法,判断用户输入的是否是一个合法的数字(这里只考虑正整数)
  19.                                         if (isValidNum(temp)) {
  20.                                                 //将用户输入的字符串转换为数字
  21.                                                 Integer num = Integer.valueOf(temp);
  22.                                                 //调用toBinary()方法将数字转换为二进制的数,并打印输出
  23.                                                 System.out.println(num + "的二进制数是:" + toBinary(num));
  24.                                         }
  25.                                 }
  26.                         } catch (IOException e) {
  27.                                 e.printStackTrace();
  28.                         }
  29.                 }
  30.         }
  31.        
  32.         /*
  33.          * 判断一个字符串是否为正整数
  34.          */
  35.         public static boolean isValidNum(String num){
  36.                 //判断用户输入的字符是否为
  37.                 if (!num.isEmpty()) {
  38.                         //用正则表达式判断用户输入的是否是全数字
  39.                         if (num.matches("\\d+")) {
  40.                                 try{
  41.                                         //捕捉异常,当有异常时说明用户输入的数字超过int类型的最大
  42.                                         Integer.valueOf(num);
  43.                                         return true;
  44.                                 }catch (NumberFormatException e){
  45.                                         System.out.println("您输入的数字已经超过int的最大值");
  46.                                         return false;
  47.                                 }
  48.                         }else{
  49.                                 System.out.println("您输入的字符中包含非数字字符");
  50.                                 return false;
  51.                         }
  52.                 }else{
  53.                         System.out.println("未检测到字符");
  54.                         return false;
  55.                 }
  56.         }
  57.        
  58.         /*
  59.          * 获取一个正整数的二进制数
  60.          */
  61.         private static StringBuilder toBinary(Integer num) {
  62.                 //创建一个StringBuilder对象来存放num每一次和2求余的值
  63.                 StringBuilder sb = new StringBuilder();
  64.                 //循环求num和2相除的余,并将余数添加到sb中
  65.                 while(num != 0){
  66.                         int temp= num % 2;
  67.                         num /= 2;
  68.                         sb.append(temp);
  69.                 }
  70.                 //先求出来的余数是二进制的最低位,所以需要反转一下
  71.                 sb.reverse();
  72.                 return sb;
  73.         }
  74. }
复制代码




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马