黑马程序员技术交流社区

标题: 求解一个转换二进制的问题 [打印本页]

作者: 冷漠无天    时间: 2013-12-7 10:49
标题: 求解一个转换二进制的问题
public static String toBinary(String str){
                //定义一个StringBuffer类型的对象用来存放的数据
                StringBuffer sb=new StringBuffer();
                //把传过来的数据转换成一个Integer类型的数据
        int i=        Integer.parseInt(str);
        //当输入的数据不为0时进行循环还为了防止0作为被除数
        while(i!=0){
                //对输入转换后的值取余运算
                int        a=i%2;
                //对输入数据进行除2取整
                int b=i/2;
                //把得到的数据赋给i
                i=b;
                //当取到的余数不为o时一直循环
                while(a>0){
                        //把取到的余数添加进StringBuffer中
                sb.append(a);
                        }       
                }
        //把得到的数据反转并且返回这个数据
        return sb.reverse().toString();
        }
当运行代码输入数据的时候报下面这个错误,那错了求指导
1Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at java.util.Arrays.copyOf(Unknown Source)
        at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source)
        at java.lang.AbstractStringBuilder.append(Unknown Source)
        at java.lang.StringBuffer.append(Unknown Source)
        at com.itheima.Test9.toBinary(Test9.java:85)
        at com.itheima.Test9.main(Test9.java:30)

作者: lichao    时间: 2013-12-7 13:07
将你的代码该为:
  1. public class Demo1 {
  2.         public static String toBinary(String str){        
  3.         StringBuffer sb=new StringBuffer();        
  4.         int i=Integer.parseInt(str);
  5.                 while(i!=0){                        
  6.                         int a=i%2;                       
  7.                         int b=i/2;                     
  8.                         i=b;               
  9.                         sb.append(a);                                      
  10.                         }
  11.                         return sb.reverse().toString();
  12.                 }
  13.         public static void main(String[] args){
  14.                 System.out.println(toBinary("7"));
  15.         }
  16. }
复制代码

运行结果:
111
你的问题在于:
  1.   while(a>0){
  2.                         //把取到的余数添加进StringBuffer中
  3.                 sb.append(a);
  4.                         }  
复制代码

代码。
如果传入的数据是5,那么第一次循环a=1,则这个while语句不会停止,会死循环。
如果传入的数据时4,那么第一次循环a=0,则这个while不会循环,0就不会存入sb中,第二次循环依旧a=0,0又存入不到sb中,第三次循环,a=1,这while不会停止,死循环,会一直往sb中存入1,报OutOfMemoryError错误
作者: 莫斯科的眼泪    时间: 2013-12-7 20:29
1Exception in thread "main" java.lang.OutOfMemoryError: Java heap space的意思是内存溢出,出现的状况读了大量的数据到内存,要不就是做的循环创建的无数的对象到内存而导致内存溢出,这句话出的问题sb.append(a);




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