黑马程序员技术交流社区
标题:
求解一个转换二进制的问题
[打印本页]
作者:
冷漠无天
时间:
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
将你的代码该为:
public class Demo1 {
public static String toBinary(String str){
StringBuffer sb=new StringBuffer();
int i=Integer.parseInt(str);
while(i!=0){
int a=i%2;
int b=i/2;
i=b;
sb.append(a);
}
return sb.reverse().toString();
}
public static void main(String[] args){
System.out.println(toBinary("7"));
}
}
复制代码
运行结果:
111
你的问题在于:
while(a>0){
//把取到的余数添加进StringBuffer中
sb.append(a);
}
复制代码
代码。
如果传入的数据是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