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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡刚涛 中级黑马   /  2012-8-14 12:53  /  1470 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class TestDemo {
public static void main(String[] args) {
  // TODO Auto-generated method stub

  String st=null;
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));//键盘录入
try {
  
  st=bufr.readLine();
} catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}
//调用转换二进制方法
toBin(st);
}
public static void toBin(String st){
  Integer num=null;
   boolean blag=true;
   int x=0;
while(x<st.length()){
  char c=st.charAt(x);
  if(st.charAt(0)=='0'){
   System.out.println("第一位是零");
   blag=false;
   break;
  }
  if(!(c>47 && c<58)){
   System.out.println("出现非数字字符");
   blag=false;
   break;
  }
  x++;
}
if(Integer.parseInt(st)>Integer.MAX_VALUE){
  System.out.println("数字太大");
  blag=false;
  }

if(blag){
  
  StringBuffer sbf=new StringBuffer();//定义一个容器
   num = Integer.valueOf(st);
  while(num>0){
   sbf.append(num%2);
    num >>>= 1;// 无符号右移1位,相当于num = num / 2;只不过效率更高
  }
  System.out.println(sbf.reverse());
}
else
  System.out.println("请检查!!!");
}
}
输入12345678987654结果是
12345678987654
Exception in thread "main" java.lang.NumberFormatException: For input string: "12345678987654"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at com.itheima.Test9.toBin(Test9.java:52)
at com.itheima.Test9.main(Test9.java:32)
不是应该输出数字太大吗 不懂求解!!!

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
本帖最后由 黎健东 于 2012-8-14 13:28 编辑

这个是我自己写的
  1. public class Test009_NumberTest {
  2.         public static void main(String[] args) throws IOException{
  3.                 System.out.println("请输入一行正整数,回车则结束本次输入,end则退出程序");

  4.                 // 字符输入流
  5.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  6.                 // 字符输出流
  7.                 BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

  8.                 String line = null;
  9.                 String end = "end";
  10.                 String regex = "[0-9]+";
  11.                 while ((line = bufr.readLine()) != null) {
  12.                         if (line.equals(end)) {
  13.                                 break;
  14.                         } else if (!line.matches(regex)) {
  15.                                 System.out.println("输入的字符串中包含非数字字符,请重新输入,如:23");
  16.                                 continue;
  17.                         } else {
  18.                                 int value = 0;
  19.                                 try {
  20.                                         System.out.println("你输入的值是:" + line);
  21.                                         value = Integer.valueOf(line);
  22.                                 } catch (Exception e) {
  23.                                         System.out.println("输入的数值超过int类型值的范围,请重新输入");
  24.                                         continue;
  25.                                 }
  26.                         
  27.                                 //商数
  28.                                 int quotient = value;
  29.                                 //余数
  30.                                 int remainder;
  31.                                 StringBuilder sb = new StringBuilder();
  32.                                 
  33.                                 //为0的情况
  34.                                 if(value == 0){
  35.                                         System.out.println("转化成二进制为:" + value);
  36.                                         System.out.println("可继续输入,结束输入end");
  37.                                         continue;
  38.                                 }
  39.                                 
  40.                                 int temp = 0;
  41.                                 
  42.                                 //不为0的情况,取得所有余数
  43.                                 while(quotient != 0){                                
  44.                                         temp = quotient;
  45.                                         //相当于 / 2
  46.                                         quotient = quotient >>> 1;                                    
  47.                                         remainder = temp % 2;
  48.                                        
  49.                                         sb.append(remainder);
  50.                                 }
  51.                                 
  52.                                 //将所有余数反向存储到字符串中
  53.                                 String allRemainder = sb.reverse().toString();
  54.                                 
  55.                                 System.out.println("转化成二进制为:");

  56.                                 bufw.write(allRemainder);
  57.                                 bufw.newLine();
  58.                                 bufw.flush();
  59.                                 System.out.println("可继续输入,结束输入end");
  60.                         }
  61.                 }
  62.                 bufw.close();
  63.                 bufr.close();

  64.         }
  65. }
复制代码
对比后,你会发现,你用的是if判断,我用的是try catch判断
if(里边的的这个值越界了)
Integer.parseInt()这个接受到的值越界的时候,直接就抛异常了,还轮不到执行 > 这个判断
所以,你可以自己自定义异常
也可以直接像我那样try catch之后,不抛异常,直接输出结论


输出:

请输入一行正整数,回车则结束本次输入,end则退出程序
123
你输入的值是:123
转化成二进制为:
1111011
可继续输入,结束输入end
8
你输入的值是:8
转化成二进制为:
1000
可继续输入,结束输入end
123132132135456131
你输入的值是:123132132135456131
输入的数值超过int类型值的范围,请重新输入

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
ok了!!!问题已经搞定,已解决!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马