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

梁古叔广

初级黑马

  • 黑马币:36

  • 帖子:20

  • 精华:0

编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。
这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。

楼主卡在如何判断是否数字太大的位置,结果用比较笨的办法些出来,也不知道有没有问题,求指正,还望各位有好的方法能不吝分享,以下是楼主的本方法代码
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Test {

        /**
         * 编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。
         * 这个程序要考虑输入的字符串不能转换成一个十进制整数的情况
         * ,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                ArrayList<Integer> al = new ArrayList<>();
                Scanner sc = new Scanner(System.in);
                System.out.println("输入数据");
               
                String s = sc.nextLine();
                if(!s.matches("[0-9]+")){
                        System.out.println("错误!其中包含非数字字符");
                        return;
                }else if(s.matches("[0](.)+")){
                        System.out.println("错误!以0开头");
                        return;
                }else if(getNum(s)>0){
                        System.out.println("错误!输入数据过大");
                        return;
                }else{
                       
                        int i = Integer.parseInt(s);
                        System.out.println(i);
                        while (i != 0) {
                                al.add(i % 2);
                                i = i / 2;
                        }
                }
                Collections.reverse(al);
                for (Integer in : al) {
                        System.out.print(in);
                }

        }

        private static int getNum(String s) {
                char[] arr1=s.toCharArray();
                char[] arr2 =(Integer.MAX_VALUE+"").toCharArray();
                int num = 0;
                if(arr1.length >arr2.length){
                        num=1;
                }else if(arr1.length<arr2.length){
                        num=-1;
                }else{
                        for (int i = 0; i < arr2.length; i++) {
                                num =arr1[i]-arr2[i];
                                if(num!=0){
                                        break;
                                }
                        }
                }
                return num;
        }

}

6 个回复

倒序浏览
getnum方法判断大小可以比较两个字符串大小,十进制转二进制好像有个方法直接用。0开头的字符串转整形头部应该会去掉吧?(没测试过,目测是可以的)
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
13902480061 发表于 2016-10-12 05:52
getnum方法判断大小可以比较两个字符串大小,十进制转二进制好像有个方法直接用。0开头的字符串转整形头部 ...

十转二 我就用的除基数倒取余,不知道直接方法是啥,这个我测试好像是没问题的,但是感觉判断数据是否过大的getNum()方法有点笨,不知道有没有更简单的
回复 使用道具 举报
梁古叔广 发表于 2016-10-12 11:34
十转二 我就用的除基数倒取余,不知道直接方法是啥,这个我测试好像是没问题的,但是感觉判断数据是否过大的 ...

十进制转成十六进制:
Integer.toHexString(int i)
十进制转成八进制
Integer.toOctalString(int i)
十进制转成二进制
Integer.toBinaryString(int i)
十六进制转成十进制
Integer.valueOf("FFFF",16).toString()
八进制转成十进制
Integer.valueOf("876",8).toString()
二进制转十进制
Integer.valueOf("0101",2).toString()
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
13902480061 发表于 2016-10-12 20:19
十进制转成十六进制:
Integer.toHexString(int i)
十进制转成八进制

谢谢,长知识了....
回复 使用道具 举报
[Java] 纯文本查看 复制代码
		/*
		 * 1:键盘录入一个int类型的整数,对其求二进制表现形式
		 * 如果录入的整数过大,给予提示,录入的整数过大请重新录入一个整数(BigInteger)
		 * 如果录入的是小数,给予提示,录入的是小数,请重新录入一个整数(BigDecimal)
		 * 如果录入的是其他字符,给予提示,录入的是非法字符,请重新录入一个整数 注意 推荐使用 字符串的方法
		 */
		Scanner sc = new Scanner(System.in);
		System.out.println(Integer.MAX_VALUE);
		System.out.println("请录入一个int类型的整数,返回二进制表现形式");
		while (true) {
			String line = sc.nextLine();

			if (line.matches(".*[\\.].*")) {
				if (!line.endsWith(".")) {
					System.out.println("录入的是小数,请重新录入一个整数");
					continue;
				}

			}
			if (line.matches(".*[\\D].*") || line.endsWith(".")) {
				System.out.println("录入的是非法字符,请重新录入一个整数");
			} else if ((new BigInteger(line).compareTo(new BigInteger(
					Integer.MAX_VALUE + ""))) > 0) {
				System.out.println("录入的整数过大请重新录入一个整数");
			} else {
				String binaryString = Integer.toBinaryString(Integer
						.parseInt(line));
				System.out.println("该数的二进制是:" + binaryString);
				break;
			}

		}

	
回复 使用道具 举报
一半的留言 发表于 2016-10-12 22:25
[mw_shl_code=java,true]
                /*
                 * 1:键盘录入一个int类型的整数,对其求二进制表现形式

厉害 word哥,正则用的6666
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马