Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.stackOverflow错误_Java_Android_Random - Fatal编程技术网

java.lang.stackOverflow错误

java.lang.stackOverflow错误,java,android,random,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; Ap

我的代码中出现堆栈溢出错误。在我的程序中,我想生成一个大约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();
    }
for(int i=1;i 100)
{
numberSequenceArray.clear();
LogE(“数组的结果-”+结果);
genRandomArray();
}
否则,如果(结果<100)
{
hideLoadingDialog(getActivity());
LogE(“数组的结果-”+结果);
final NumberFlash numflash=新的NumberFlash(getActivity(),duration,tickingPeriod,min,max,“False”,textNo,output,getFragmentManager(),“fingerMath”);
numflash.start();
}

这里的一个问题是如何创建随机变量

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

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;
}

这里的一个问题是创建随机变量的方式

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

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()
的方法中。当
result
大于100时,对该方法进行递归调用。stackoverflow发生的原因是这种情况发生的次数太多


应该使用迭代循环,而不是递归重复。这将使用更少的内存并避免堆栈溢出。

我假设您发布的代码位于名为
genRandomArray()
的方法中。当
result
大于100时,对该方法进行递归调用。stackoverflow发生的原因是这种情况发生的次数太多


应该使用迭代循环,而不是递归重复。这将使用更少的内存并避免stackoverflow。

请发布stacktrace并指出导致错误的行。还请显示包含代码的方法和类。代码示例不完整,第二个变量尚未定义。请加强您的问题。请发布stacktrace并指出导致错误的行。还请显示包含代码的方法和类。代码示例不完整,第二个变量尚未定义。请加强您的问题。
如果(…)中断
似乎完全没有必要,因为它是
while
循环中的最后一条语句。一个精心设计的
while
条件将具有相同的效果,只需输入更少的内容。我实际上正在考虑修改
while
循环,而不是使用
do…while
。当然,这需要将
result
的声明移到循环之外,并使用允许循环至少执行一次的值初始化它。即使是
do…而
也需要在循环之前声明变量。@code学徒我认为
break
的简单性有其价值。除了语义,这里没有什么真正的好处。更少的打字似乎也有点迂腐,
if(…)break
似乎完全没有必要,因为它是
while
循环中的最后一条语句。一个精心设计的
while
条件将具有相同的效果,只需输入更少的内容。我实际上正在考虑修改
while
循环,而不是使用
do…while
。当然,这需要将
result
的声明移到循环之外,并使用允许循环至少执行一次的值初始化它。即使是
do…而
也需要在循环之前声明变量。@code学徒我认为
break
的简单性有其价值。除了语义,这里没有什么真正的好处。少打字似乎也有点迂腐