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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张昶 中级黑马   /  2013-7-13 13:10  /  1926 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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


package com.itheima;

import java.lang.StringBuffer;
import java.util.Scanner;

public class Test_09 {
        public static String stringToBinaryArr(String numStr) {
            StringBuffer strBuf = new StringBuffer();
            if(isToLarge(numStr)) {
                strBuf.append("该数字超出了整数接收范围。");
                return strBuf.toString();
            }
            if(includeIlligleChar(numStr)) {
                strBuf.append("该数字有非法字符。");
                return strBuf.toString();
            }
            int num = Integer.parseInt(numStr);    //将字符串转换成整数
            //转换成二进制数
            strBuf = toBinary(num);
            return strBuf.toString();
        }
          
        //判断接收的数字是否超过了整数型的存储范围。
        public static boolean isToLarge(String numStr) {
            String max = Integer.MAX_VALUE + "";
            if(max.length() < numStr.length()) {       //如果位数大于最大整数的位数直接返回true
                return true;
            } else if(max.length() == numStr.length()) {       //如果位数等于最大整数的位数则将其都转换为double型计算
                Double maxDouble = Double.parseDouble(max);
                Double numStrDouble = Double.parseDouble(numStr);
                if(maxDouble < numStrDouble) {
                    return true;
                }
            }
            return false;
        }
          
        //判断接收的数字中是否含有非法字符
        public static boolean includeIlligleChar(String numStr) {
            char[] cNum = numStr.toCharArray();
            for(int i = 0; i < cNum.length; i++) {
                if(cNum[i] <= '0' || cNum[i] >= '9') {
                    return true;
                }
            }
            return false;
        }
          
        //将接收的数字转换成二进制数
        public static StringBuffer toBinary(int num) {
            StringBuffer strBuf = new StringBuffer();
            int bit;
            while(num > 1) {   //如果数字还没有除完,则继续求二进制数。
                bit = num%2;
                strBuf.append(bit + "");
                num = num/2;
            }
            if(num == 0) {               //加上最后一位。
                strBuf.append('0');
            } else if(num == 1) {
                strBuf.append('1');
            }
            strBuf = strBuf.reverse();
            return strBuf;
        }
            
        public static void main(String[] args) {
                Scanner scan = new Scanner(System.in);
                System.out.println("请输入一行字符串:");
                String str = scan.nextLine();
                stringToBinaryArr(str);
        }
}
求高手指点一下,哪里错了???

2 个回复

倒序浏览
    楼主最后一句  stringToBinaryArr(str);只是调用将输入 的字符试图转换成二进制,并没有打印出结果。改为System.out.println(stringToBinary(str));试试看结果会不会打印出来。
回复 使用道具 举报
哦,谢谢哈!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马