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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梁清平 中级黑马   /  2012-5-21 20:03  /  2726 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。
这是传智播客的一个题。。有几点不明白
1 要用到流吗?System.int?
2 字符串怎么转整数啊?是换成char后转吗?
3 是只能转字母而不能转如符号之类的吗?

4 个回复

正序浏览
楼上几位同学都给出代码了。。不过我以为还是让楼主独立思考并写出代码的好,楼主也没要求代码,只问了几个疑问。这几个我依次回答吧。
1.键盘输入是要用到流的,而且一般都是BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));  这段老毕曾说背也要背下来的。。
2.字符串转换为整数,楼主觉得应该是谁有的功能,是不是应该是整数有的功能,它将一个字符串转化为整数,事实上Integer.valueOf("12")就能得到值为12的Integer对象,至于得到这个对象以后怎么用就看楼主怎么想了。
3.这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。
事实上Integer.valueOf("12ss")这样一句话会引起 java.lang.NumberFormatException这样一个运行时异常,而题意要求你能分类处理这些异常,也就是说要对用户输入进来的字符串进行分析和判断了。
希望对楼主有用。
回复 使用道具 举报
  1. package 复习题;

  2. import java.util.Scanner;

  3. public class 复习题十 {

  4.         /**
  5.          * @编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。
  6.          */
  7.         public static void main(String[] args) {
  8.                 // 导入Scanner 方法,进行键盘输入
  9.                 Scanner input = new Scanner(System.in);
  10.                 System.out.println("请输入一个十进制的整数 ,程序将为你转换成二进制的整数");
  11.                 // 键盘输入字符串
  12.                 String line = input.next();
  13.                 // 调用Integer.parseInt();方法将字符串转换成int型整数
  14.                 int x = Integer.parseInt(line);
  15.                 //输出二进制
  16.                 System.out.println(binary(x));
  17.                 //调用 Integer.toBinaryString();
  18.                 System.out.println(Integer.toBinaryString(x));
  19.         }

  20.         static StringBuffer binary(int a) {                 //十进制转二进制方法
  21.                 StringBuffer sb = new StringBuffer();                        //定义一个容器用来储存整数模2取余的结果
  22.                 while (a > 0) {                                                                       
  23.                         sb.append(a % 2);                                                        //将a%2的值添加进容器
  24.                         a /= 2;                                                                                //对数字a进行不断的除2
  25.                 }
  26.                 sb.reverse();                                                                        //将容器内的元素进行反转
  27.                 return sb;                                                                                //返回容器内的值
  28.         }
  29. }
复制代码
回复 使用道具 举报
不解释 贴代码
  1. package 复习题;

  2. import java.util.Scanner;

  3. public class 复习题十一 {

  4.         /**
  5.          * @使用移位方式将一个十进制数转换为十六进制。
  6.          * 三种方式:
  7.          * 0-9之间的数值直接加上字符'0',9以上的数值减去10以后再加上字符'A' 定义一个数组,
  8.          * 其中包含0-F这些字符,然后用要计算的数值作为数组的索引号,即可获得其对应的十六进制数据。
  9.          * Character.forDigit静态方法可以将一个十六进制的数字转变成其对应的字符表示形式.例如,根据数值15返回字符'F'。
  10.          */
  11.         public static void main(String[] args) {
  12.                 Scanner input = new Scanner (System.in);
  13.                 System.out.println("请输入一个十进制的整数,程序为你转换成它的十六进制形式 ....");
  14.                 String line = input.next();
  15.                 int x = Integer.parseInt(line);
  16.                 System.out.println(sexadecimal1(x));
  17.         }

  18.         static StringBuffer sexadecimal(int a) {                  //定义一个方法,用来计算十进制转十六进制的结果       
  19.                 StringBuffer sb = new StringBuffer();                  //定义一个容器用来装每次%16的结果
  20.                 while (a > 0) {
  21.                         int b = a& 15;                            //定义一个变量y让并赋值是x除以16得到的余数,用位运算的方式体现  a% 16
  22.                         if (b > 9) {                              //将余数转化为16进制,"余数-10"得到大于10的部分,大于多少就把'A'加上多少,再把得数强转成char.
  23.                                 sb.append((char) (b- 10 + 'A'));
  24.                         } else {                                  //如果余数不大于9,直接将余数添加容器中
  25.                                 sb.append(b);
  26.                         }
  27.                         a = a >> 4 ;                              //a = a / 16;  //2*2*2*2               
  28.                 }
  29.                 sb.reverse();                                                                  //将余数反转
  30.                 return sb;                                    //将容器的结果返回
  31.         }

  32.         static StringBuffer sexadecimal1(int a) {         //用数组的方式来进行十进制对十六进制的转换
  33.                 StringBuffer sb = new StringBuffer();         //定义一个容器,用来装取余数对应的数组中的元素
  34.                 char arr[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
  35.                                 'B', 'C', 'D', 'E', 'F' };            
  36.                 while (a > 0) {                                                                  //定义一个循环,a%16取得的余数等于数组中的角标就让该角标对应的字符添加到容器中
  37.                         for (int i = 0; i < arr.length; i++) {
  38.                                 if (a % 16 == i)
  39.                                         sb.append(arr[i]);
  40.                         }
  41.                         a =a/16;                                                                  //外层while循环的目的是不断的将a/16的结果重新赋值给a
  42.                 }
  43.                 sb.reverse();                                                                  //将容器反转
  44.                 return sb;                                    //将获得的容器的结果返回
  45.         }
  46.        
  47.         static StringBuffer sexadecimal2(int a) {                  //定义一个方法,用来计算十进制转十六进制的结果       
  48.                 StringBuffer sb = new StringBuffer();                  //定义一个容器用来装每次%16的结果
  49.                 while (a > 0) {
  50.                             int y = a&15;                                 
  51.                                 sb.append(Character.forDigit(y,16));  //将y转成十六进制形式
  52.                         a = a >> 4 ;                              //a = a / 16;  //2*2*2*2               
  53.                 }
  54.                 sb.reverse();                                                                  //将余数反转
  55.                 return sb;                                    //将容器的结果返回
  56.         }
  57. }
复制代码
回复 使用道具 举报
  1. import java.util.Scanner;
  2. class Test3
  3. {
  4.         public static void main(String []args){
  5.            System.out.println("请输入一个数字");
  6.                 Scanner scan=new Scanner(System.in);
  7.                 String input=scan.next();
  8.                 //字符串的长度
  9.                 int len=input.length();
  10.                 char[] chs=new char[len];
  11.                 //将字符串复制到字符数组
  12.                 input.getChars(0, len, chs, 0);
  13.                 //遍历每个字符
  14.                  for (int i=0;i<input.length() ;i++){
  15.                         if(!Character.isDigit(chs[i])){
  16.                                 System.out.println("存在非数字字符:"+chs[i]);
  17.                         }
  18.                  }
  19.                  try{
  20.                         int value=Integer.parseInt(input);
  21.                         toBinary(value);
  22.                  }catch (Exception e){
  23.                          System.out.println("输入的数字太大);
  24.                  }

  25.         }
  26.         public static void toBinary(int num){
  27.           StringBuilder sb=new StringBuilder();
  28.           while(num>0){
  29.                 sb.append(num%2);
  30.                 num=num/2;
  31.           }
  32.           System.out.println(sb.reverse());
  33.         }
  34. }
复制代码
关于下面十进制转为二进制的方法  老毕上面讲的很清楚了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马