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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冷漠无天 中级黑马   /  2013-12-7 10:49  /  1308 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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)

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
狼王 + 1 + 3 赞一个!

查看全部评分

3 个回复

倒序浏览
将你的代码该为:
  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错误

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
狼王 + 1 + 3 很给力!

查看全部评分

回复 使用道具 举报 1 0
1Exception in thread "main" java.lang.OutOfMemoryError: Java heap space的意思是内存溢出,出现的状况读了大量的数据到内存,要不就是做的循环创建的无数的对象到内存而导致内存溢出,这句话出的问题sb.append(a);

评分

参与人数 1黑马币 +6 收起 理由
狼王 + 6

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马