在线编程--无限字符串--堆内存溢出怎么办

anyway22 2014-03-21 03:24:56
这是csdn首页上在线编程的一个题目
假设字符串A=“^__^" (4个字符),B="T.T"(3个字符),我们进行如下步骤:
(1) 把A接到B的后面得到字符串C (按样例C="T.T^__^")
(2) 令A=B,B=C 不断重复步骤(1)(2)得到的字符串是无穷的。
求这个串的第n个字符。(0<n<2^63)
代码如下

public static void main(String[] args) {
// TODO Auto-generated method stub
String a="^__^";
String b="T.T";
StringBuilder c = new StringBuilder();
Scanner sc=new Scanner(System.in);
int n = sc.nextInt();
c.append(b);
do{
c.append(a);
a=b;
b=c.toString();
}while(n>c.length());
System.out.println(c);
System.out.println(c.charAt(n-1));
}

当n比较小的时候没有问题 但是n过大时会java.lang.OutOfMemoryError: Java heap space
应该怎么处理呢?没接触过堆栈的知识....eclipse设置虚拟机大小,-Xmx512m 有用吗?
...全文
308 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qider 2014-03-25
  • 打赏
  • 举报
回复
这是找规律的题,不是编程题。
lliiqiang 2014-03-24
  • 打赏
  • 举报
回复
这个就是普通递归,可以使用StringBuilder.
msj100ff 2014-03-22
  • 打赏
  • 举报
回复
这肯定不是让你把字符串拼起来再找第n个字符 利用A=B,B=C的规律 计算第n个字符是什么
代码间的舞者 2014-03-22
  • 打赏
  • 举报
回复
1、题目没有要求打印C。 2、题目要求2^63,所以n应该用long,而不是int
蓝晨大菜鸟 2014-03-21
  • 打赏
  • 举报
回复
我想说的是 你内存就这么大 你来个无限你就算 直接new 都会溢出啊!
蓝晨大菜鸟 2014-03-21
  • 打赏
  • 举报
回复
我想说的是 你内存就这么打 你来个无限你就算 直接new 都会溢出啊!
vcshcn 2014-03-21
  • 打赏
  • 举报
回复
%7行不%7行不

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧