java.lang.stackOverflow错误android

标签 java android random

我的代码中出现堆栈溢出错误。在我的程序中,我想生成大约 10-15 个元素的随机整数,但总和应小于 100。有时我得到的输出没有任何错误,但有时我收到错误。请提供是否有比这更好的解决方案。

        for (int i=1; i<= noOfQue; i++)
    {
        Random rand = new Random();
        int randomNum = rand.nextInt((max - min) + 1) + min;
        AppDelegate.LogE("Random Number Gen in Array - " + randomNum);
        numberSequenceArray.add(randomNum);
        result+=randomNum;
    }

    if(result > 100)
    {
        numberSequenceArray.clear();
        AppDelegate.LogE("Result of Array - " + result);
        genRandomArray();
    }

    else if( result < 100)
    {
        AppDelegate.hideLoadingDialog(getActivity());
        AppDelegate.LogE("Result of Array - " + result);
        final NumberFlash numflash = new NumberFlash(getActivity(),duration , tickingPeriod, min , max, "False", textNo, output, getFragmentManager(),"FingerMaths");
        numflash.start();
    }

最佳答案

这里的一个问题是创建随机数的方式。

Random rand = new Random();

这应该只被调用一次。当您在短时间内构造一个没有参数(没有给定种子)的随机数时,它最终可能会使用相同的种子。如果它使用相同的种子,它将生成相同的随机模式并一遍又一遍地创建相同的整数。将其移至循环外部,或将其添加为私有(private)类字段

Random rand = new Random();
for (int i=1; i<= noOfQue; i++)
{
    int randomNum = rand.nextInt((max - min) + 1) + min;
    AppDelegate.LogE("Random Number Gen in Array - " + randomNum);
    numberSequenceArray.add(randomNum);
    result+=randomNum;
}
<小时/>

我假设 genRandomArray(); 行是递归调用。随机性的问题在于最终条件可能永远不会得到满足。每次发生递归调用时,它都会添加到调用堆栈中。如果进行了足够多的调用,则此递归可能最终会使用所有 JVM 内存,从而导致堆栈溢出。

尝试使用 while 循环构造此函数,而不是使其递归,以避免过多的内存使用。

Random rand = new Random();
while(true)
{
    numberSequenceArray.clear();
    int result = 0;
    for (int i=1; i<= noOfQue; i++)
    {
        int randomNum = rand.nextInt((max - min) + 1) + min;
        AppDelegate.LogE("Random Number Gen in Array - " + randomNum);
        numberSequenceArray.add(randomNum);
        result+=randomNum;
    }
    AppDelegate.LogE("Result of Array - " + result);
    if(result <= 100)
    {
        break;
    }
}

关于java.lang.stackOverflow错误android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35561316/

相关文章:

java - 在获取 Java 文件对象之前知道文件是否完整

c++ - 一个随机数生成器,可以在<一秒内得到不同的数字

java - 如何检查数组的随机部分是否等于特定数组部分?

java - Android ListView 与 LinkedHashMap - 滚动时列表乱序

java - jacob.dll 已经加载到另一个类加载器中

java - 有没有可以在这种情况下工作的设计模式?

android - 追加数据加载更多 ListView

android - 在compose中,为什么修改List元素的属性,LazyColumn不刷新

java - 以编程方式更改 TableLayout 中整个列的背景颜色

r - 种子设置 : why is the output different after no change in input