黑马程序员技术交流社区

标题: 互相学习 [打印本页]

作者: 刘德坤    时间: 2015-10-17 00:13
标题: 互相学习
package com.itheima;

import java.io.BufferedReader;
import java.io.InputStreamReader;

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

                while (true) {
                        System.out.println("请输入一个整数:");
                        //得到键盘输入的字符串
                        String inStr = getStringFromKeyboard();       
                        //通过异常处理,判断输入的字符串能否转换成十进制整数
                        try {                               
                                int number = Integer.parseInt(inStr);
                               
                                //第二个参数为几,输出的就是多少进制的数
                                System.out.println("他的二进制为"+toRedix(number, 2));
                               
                                System.out.println("他的十进制为"+toRedix(number, 10));  
                                break;
                        } catch (Exception e) {
                                continue;
                        }
                }
               
               
               
        }

        /**
         * 进制转化
         * @param number 除数
         * @param divider 要转化为多少进制的数
         * @return
         */
       
        private static String toRedix(int number, int divider) {
                StringBuilder sb = new StringBuilder();
                while (true) {
                        //余数
                        int remainer = number % divider;
                       
                        sb.append(remainer);                       
                       
                        number = number / divider;

                        if (number == 0){
                                break;
                        }
                       
                }
               
                return sb.reverse().toString();               
        }

        private static String getStringFromKeyboard() throws Exception {               
                BufferedReader br = null;               
                try {
                        //将键盘输入字节流转化为字符流,并将字节流缓冲,从而实现对字符高效读取
                        br = new BufferedReader(new InputStreamReader(System.in));
                       
                        return br.readLine();
                } finally/*在finally代码块中关闭流*/{
                        if(br != null){
                                br.close();
                        }                       
                }
        }
       
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2