GVKun编程网logo

BigInteger的StackOverflowError计算阶乘?(bigdecimal阶乘怎么算)

24

在本文中,我们将给您介绍关于BigInteger的StackOverflowError计算阶乘?的详细内容,并且为您解答bigdecimal阶乘怎么算的相关问题,此外,我们还将为您提供关于androi

在本文中,我们将给您介绍关于BigInteger的StackOverflowError计算阶乘?的详细内容,并且为您解答bigdecimal阶乘怎么算的相关问题,此外,我们还将为您提供关于android-StackOverflowError 1.5与1.6、Android开发中StackOverflowError、ANTLR4解析期间发生StackOverflowError、IntelliJ IDEA编译时报StackOverflowError的知识。

本文目录一览:

BigInteger的StackOverflowError计算阶乘?(bigdecimal阶乘怎么算)

BigInteger的StackOverflowError计算阶乘?(bigdecimal阶乘怎么算)

我正在尝试编写一个Java程序来计算大量的阶乘。似乎BigInteger无法容纳这么多的人。

以下是我编写的(直接)代码。

 public static BigInteger getFactorial(BigInteger num) {      if (num.intValue() == 0) return BigInteger.valueOf(1);      if (num.intValue() == 1) return BigInteger.valueOf(1);      return num.multiply(getFactorial(num.subtract(BigInteger.valueOf(1))));  }

上面的程序在5022中处理的最大数量,之后该程序将抛出StackOverflowError。还有其他方法可以处理吗?

答案1

小编典典

这里的问题似乎是由于过多的递归导致堆栈溢出(5000个递归调用看起来像是要炸掉Java
调用堆栈的正确调用次数),而不是限制。迭代重写阶乘函数应解决此问题。例如:BigInteger

public static BigInteger factorial(BigInteger n) {    BigInteger result = BigInteger.ONE;    while (!n.equals(BigInteger.ZERO)) {        result = result.multiply(n);        n = n.subtract(BigInteger.ONE);    }    return result;}

希望这可以帮助!

android-StackOverflowError 1.5与1.6

android-StackOverflowError 1.5与1.6

我有一个创建ListActivity的布局.在显示ListActivity之前,我先执行数据库查询,然后使用SimpleCursorAdapter将数据挂接到列表.

所有这些在1.6及更高版本上都可以正常工作.在1.5上,执行查询的my函数成功执行,但几秒钟后发生StackOverflowError.有谁知道为什么在1.5中而不是1.6中会发生此错误?

更新:我确定当我从带有TabView的Activity移至带有ListView的Activity时发生崩溃.如果我从不包含选项卡视图的活动中转到ListView,则不会发生崩溃. ListView的活动正在将游标返回到查询,该查询中数据库有大约10列.在这10列中,我在屏幕上显示3列.

这是我的代码的执行流程:

TabView Activity sends Intent to start List View Activity

onCreate() //of ListActivity
{
    showList();
}

showList()
{
    //open DataBase
    //perform query
    //create SimpleCursorAdapter
    //setlistadapter
}

因此,例如,这在安装了2.1的Droid和目标为1.6的仿真器上可以完全正常运行.但是以上内容在HTC Hero 1.5和目标1.5的模拟器上均无效.

如果我让setlistadapter执行,则会发生崩溃.如果那条线出了,一切正常,但是显然我的数据没有显示.它不会在调用setlistadapter的行上崩溃,但是如果曾经执行过setlistadapter,它将最终崩溃.

堆栈跟踪:

Thread [<3> main] (Suspended (exception StackOverflowError))

ViewRoot.draw(boolean) line: 1235   
ViewRoot.performTraversals() line: 1030 
ViewRoot.handleMessage(Message) line: 1482  
ViewRoot(Handler).dispatchMessage(Message) line: 99 
Looper.loop() line: 123 
ActivityThread.main(String[]) line: 3948    
Method.invokeNative(Object,Object[],Class,Class[],int,boolean) line: not available [native method]  
Method.invoke(Object,Object...) line: 521  
ZygoteInit$MethodAndArgsCaller.run() line: 782  
ZygoteInit.main(String[]) line: 540 
NativeStart.main(String[]) line: not available [native method]  
最佳答案
也许此错误不是由数据库引起的.

实际上,当您的布局层次结构太深时,通常会发生此错误.

对于1.5,它可能是13个深度.也许尝试用Hierarchy Viewer进行检查.

此外,发布堆栈跟踪可能会有所帮助.

更新:
Stacktrace明确指出问题出在您的行布局中.当您注释掉设置适配器时,不会绘制行,因此不会发生错误.

也许您在行中嵌套了太多的LinearLayout?尝试制作简单的行-如果问题消失了,您将知道要维修什么.

还可以考虑从LinearLayout移至RelativeLayout.它展平了您的视图层次结构.尽管考虑到RelativeLayout有一些错误,例如. RelativeLayout differences between 1.5 and 2.1.

Android开发中StackOverflowError

Android开发中StackOverflowError

Android开发中StackOverflowError错误实例分析
一、概述
 我在一个复杂的layout嵌套较多的android界面,碰到了java.lang.StackOverflowError这个Fatal Exception,app程序crash退出。这个错误出现的比较奇怪,在我做技术调研的时候,这个界面是放在单独的一个程序中展示的,工作很正常,没有出现这个严重错误,当将其嵌入到一个ActivityGroup后才报错。

       android SDK中对该错误的出现的场景描述为:由于栈调用的层次太多,超过了虚拟器dalvik的最大限制(作为一个虚拟器参数,可定制)导致的。当程序编写错误导致无限递归调用时会触发,此外程序正确但是递归调用的层次过深也会触发。

       结合我的界面的情况,在单独程序中运行时没有问题,则说明不存在死循环的无限递归错误。观察该界面的集成情况,发现为了Tab页实现,该界面在显示时,被两个ActivityGroup嵌套,增加了6层显式父layout。而因为该界面复杂,设计时,list_header view的layout深度为5层,而list_item的深度则为6层。原因定位为界面嵌套层次过深。
 
二、解决方法
          解决嵌套过深的基本思路是在实现同样的效果的前提下减少界面的layout深度。在我将list_header view layout深度由5层精简为3层,list_item 深度由6层减少为4层后,该错误被解决。具体的方法有:
1)       多用RelativeLayout的各种布局属性来完成布局,而避免过多使用嵌套layout来实现。
2)       占位或填充剩余空间的元素多用View,避免使用layout等viewGroup。

总结下,从实际的数据来看,设计中layout嵌套深度超过10层,就应该考虑下优化了,否则就会出现java.lang.StackOverflowError的crash了。

三、错误详细日志
E/AndroidRuntime( 5196): FATAL EXCEPTION: main
E/AndroidRuntime( 5196): java.lang.StackOverflowError
E/AndroidRuntime( 5196):    at android.graphics.Paint.measureText(Paint.java:1057)
E/AndroidRuntime( 5196):    at android.text.Styled.drawDirectionalRun(Styled.java:267)
E/AndroidRuntime( 5196):    at android.text.Styled.measureText(Styled.java:430)
E/AndroidRuntime( 5196):    at android.text.Layout.measureText(Layout.java:1655)
E/AndroidRuntime( 5196):    at android.text.Layout.getLineMax(Layout.java:689)
E/AndroidRuntime( 5196):    at android.text.Layout.draw(Layout.java:340)
E/AndroidRuntime( 5196):    at android.widget.TextView.onDraw(TextView.java:4050)
E/AndroidRuntime( 5196):    at android.view.View.draw(View.java:6740)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/AndroidRuntime( 5196):    at android.view.View.draw(View.java:6743)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.drawChild(ViewGroup.java:1638)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/AndroidRuntime( 5196):    at android.view.View.draw(View.java:6743)
E/AndroidRuntime( 5196):    at android.view.View.buildDrawingCache(View.java:6502)
E/AndroidRuntime( 5196):    at android.view.View.getDrawingCache(View.java:6288)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.drawChild(ViewGroup.java:1565)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/AndroidRuntime( 5196):    at android.widget.AbsListView.dispatchDraw(AbsListView.java:1365)
E/AndroidRuntime( 5196):    at android.widget.ListView.dispatchDraw(ListView.java:3046)
E/AndroidRuntime( 5196):    at android.view.View.draw(View.java:6846)
E/AndroidRuntime( 5196):    at android.widget.AbsListView.draw(AbsListView.java:2257)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.drawChild(ViewGroup.java:1638)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.drawChild(ViewGroup.java:1638)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/AndroidRuntime( 5196):    at android.view.View.draw(View.java:6743)
E/AndroidRuntime( 5196):    at android.widget.FrameLayout.draw(FrameLayout.java:352)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/AndroidRuntime( 5196):    at android.view.View.draw(View.java:6743)
E/AndroidRuntime( 5196):    at android.widget.FrameLayout.draw(FrameLayout.java:352)
E/AndroidRuntime( 5196):    at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1842)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/AndroidRuntime( 5196):    at android.view.View.draw(View.java:6743)
E/AndroidRuntime( 5196):    at android.widget.FrameLayout.draw(FrameLayout.java:352)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/AndroidRuntime( 5196):    at android.view.View.draw(View.java:6743)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.drawChild(ViewGroup.java:1638)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/AndroidRuntime( 5196):    at android.view.View.draw(View.java:6743)
E/AndroidRuntime( 5196):    at android.widget.FrameLayout.draw(FrameLayout.java:352)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.drawChild(ViewGroup.java:1638)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/AndroidRuntime( 5196):    at android.view.View.draw(View.java:6743)
E/AndroidRuntime( 5196):    at android.widget.FrameLayout.draw(FrameLayout.java:352)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.drawChild(ViewGroup.java:1638)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/AndroidRuntime( 5196):    at android.view.View.draw(View.java:6743)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/AndroidRuntime( 5196):    at android.view.View.draw(View.java:6743)
E/AndroidRuntime( 5196):    at android.widget.FrameLayout.draw(FrameLayout.java:352)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
E/AndroidRuntime( 5196):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/AndroidRuntime( 5196):    at android.view.View.draw(View.java:6743)
E/AndroidRuntime( 5196):    at android.widget.FrameLayout.draw(FrameLayout.java:352)
E/AndroidRuntime( 5196):    at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1842)
E/AndroidRuntime( 5196):    at android.view.ViewRoot.draw(ViewRoot.java:1407)
E/AndroidRuntime( 5196):    at
W/ActivityManager(   71):   Force finishing activity com.baidu.test/.CloudDemActivity
W/WindowManager(   71): No window to dispatch pointer action 1

本文同步分享在 博客“xiangzhihong8”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

ANTLR4解析期间发生StackOverflowError

ANTLR4解析期间发生StackOverflowError

问题出在设置范围运算符(又名“破折号”)上。要将范围运算符包括为文字,您必须对其进行转义

STRING_VALUE: '\'' [a-zA-Z0-9\-/ ]+ '\'' ;

或将其指定为集合中的最后一个成员项。

DATE_VALUE  :  [0-9-]+ ;

IntelliJ IDEA编译时报StackOverflowError

IntelliJ IDEA编译时报StackOverflowError

问题: IntelliJ IDEA编译时报StackOverflowError

解决方案: 如下图, 添加-Xss4M

我们今天的关于BigInteger的StackOverflowError计算阶乘?bigdecimal阶乘怎么算的分享就到这里,谢谢您的阅读,如果想了解更多关于android-StackOverflowError 1.5与1.6、Android开发中StackOverflowError、ANTLR4解析期间发生StackOverflowError、IntelliJ IDEA编译时报StackOverflowError的相关信息,可以在本站进行搜索。

本文标签:

上一篇使用itertools.groupby性能进行numpy分组(python itertools groupby用法)

下一篇URL哈希爆炸(#!/)前缀而不是Angular 1.6中的简单哈希(#/)(url_hash)