当我执行代码的这一部分时,我得到一个StackOverflowError:

/**
 * Determine the story based on the time.
 */
private void timeTell()
{
    if(replay == 0){
    long rndNum = System.currentTimeMillis() % 10;
    chooseStory();
    }
}

/**
 * Randomly choose which story to tell based on the current system time.
 */
private void chooseStory()
{
    if(rndNum == 1&& rndNum == 6){
        storyOne();
    }
    else if(rndNum == 2&& rndNum == 7){
        storyTwo();
    }
    else if(rndNum == 3&& rndNum == 8){
        storyThree();
    }
    else if(rndNum == 4&& rndNum == 9){
        storyFour();
    }
    else if(rndNum == 5&& rndNum == 0){
        storyFive();
    }
    else{
        timeTell();
    }
}


我知道我不需要timeTell()方法,在解决此问题后,我会将其添加到chooseStory()方法中。这只是更易于测试。我试图弄清楚问题出在哪里,所以我用chooseStory();替换了System.out.println(rndNum);,它打印了两次数字。变量replay用于查看程序是否已经运行过一次。如果用户决定再次播放,则replay从默认值0更改为1,并跳过生成新的rndNum。我使用时间而不是随机数生成器的原因是因为每次我运行程序时,生成器每次都会给我相同的序列。任何帮助将不胜感激。

最佳答案

您使用了错误的布尔运算符。

rndNum == x && rndNum == y


仅当rndNum等于x和y时才会通过-如果x和y是不同的值,则永远不会发生。您需要使用OR运算符“ ||”:

rndNum == X || rndNum == y


此外,正如@Sotirios Delimanolis指出的那样,您还将进行可变的掩盖。他还解释了为什么发生StackOverflowError

09-25 22:06