java.lang.StackOverflowerr导致我的应用程序出现问题

java.lang.StackOverflowerr导致我的应用程序出现问题,java,android,loops,stack-overflow,Java,Android,Loops,Stack Overflow,我的应用程序有问题,我无法找出问题所在。在ICS上,该应用程序工作正常,但在2.X版的任何东西上都有问题。我相信这和循环有关,但我还是有点困惑 开发人员控制台向我抛出以下错误报告: Exception class > java.lang.StackOverflowError Source method > Matrix.setScale() 这是导致问题的代码 private void shiftLoop7() { if (d7 != doy && d7 &

我的应用程序有问题,我无法找出问题所在。在ICS上,该应用程序工作正常,但在2.X版的任何东西上都有问题。我相信这和循环有关,但我还是有点困惑

开发人员控制台向我抛出以下错误报告:

Exception class > java.lang.StackOverflowError
Source method > Matrix.setScale()
这是导致问题的代码

private void shiftLoop7()
{
    if (d7 != doy && d7 < 366)
    {
        d7 = d7 + 8;
        shiftLoop7();
    }
    else if(d7 == doy)
    {

        if (hour >= 0 && hour < 8)
        {
            shift.setText("C");
            shift.setTextAppearance(getApplicationContext(), R.style.CShift);

            shiftImage.setImageResource(R.drawable.c);
            timeTill.setText("till 7:45 AM");

            dayshift.setText("A Shift");
            day1.setBackgroundResource(R.color.A);
            day2.setBackgroundResource(R.color.A);
            day3.setBackgroundResource(R.color.A);
            day4.setBackgroundResource(R.color.A);

            nightshift.setText("C Shift");
            night1.setBackgroundResource(R.color.C);
            night2.setBackgroundResource(R.color.C);
            night3.setBackgroundResource(R.color.C);
            night4.setBackgroundResource(R.color.C);
        }
        else if (hour >= 8 && hour < 17)
        {
            shift.setText("A");
            shift.setTextAppearance(getApplicationContext(), R.style.AShift);

            shiftImage.setImageResource(R.drawable.a);
            timeTill.setText("till 4:45 PM");

            dayshift.setText("A Shift");
            day1.setBackgroundResource(R.color.A);
            day2.setBackgroundResource(R.color.A);
            day3.setBackgroundResource(R.color.A);
            day4.setBackgroundResource(R.color.A);

            nightshift.setText("C Shift");
            night1.setBackgroundResource(R.color.C);
            night2.setBackgroundResource(R.color.C);
            night3.setBackgroundResource(R.color.C);
            night4.setBackgroundResource(R.color.C);
        }
        else
        {
            shift.setText("C");
            shift.setTextAppearance(getApplicationContext(), R.style.CShift);

            shiftImage.setImageResource(R.drawable.c);
            timeTill.setText("till 7:45 AM");

            dayshift.setText("A Shift");
            day1.setBackgroundResource(R.color.A);
            day2.setBackgroundResource(R.color.A);
            day3.setBackgroundResource(R.color.A);
            day4.setBackgroundResource(R.color.A);

            nightshift.setText("C Shift");
            night1.setBackgroundResource(R.color.C);
            night2.setBackgroundResource(R.color.C);
            night3.setBackgroundResource(R.color.C);
            night4.setBackgroundResource(R.color.C);
        }
    }
    else
    {
        shiftLoop8();
    }
}
private void shiftLoop7()
{
如果(d7!=doy&&d7<366)
{
d7=d7+8;
shiftLoop7();
}
否则如果(d7==doy)
{
如果(小时>=0和小时<8)
{
shift.setText(“C”);
setExtAppearance(getApplicationContext(),R.style.csShift);
shiftImage.setImageResource(R.drawable.c);
timeTill.setText(“直到上午7:45”);
dayshift.setText(“班次”);
第1天:挫折资源(R.color.A);
第2天:挫折资源(R.color.A);
第3天:挫折资源(R.color.A);
第4天.挫折资源(R.color.A);
夜班;
夜1.挫折资源(R.color.C);
夜间2.挫折资源(R.color.C);
3.挫折资源(R.color.C);
4.挫折资源(R.color.C);
}
否则,如果(小时>=8和小时<17)
{
shift.setText(“A”);
setExtAppearance(getApplicationContext(),R.style.AShift);
shiftImage.setImageResource(R.drawable.a);
timeTill.setText(“直到下午4:45”);
dayshift.setText(“班次”);
第1天:挫折资源(R.color.A);
第2天:挫折资源(R.color.A);
第3天:挫折资源(R.color.A);
第4天.挫折资源(R.color.A);
夜班;
夜1.挫折资源(R.color.C);
夜间2.挫折资源(R.color.C);
3.挫折资源(R.color.C);
4.挫折资源(R.color.C);
}
其他的
{
shift.setText(“C”);
setExtAppearance(getApplicationContext(),R.style.csShift);
shiftImage.setImageResource(R.drawable.c);
timeTill.setText(“直到上午7:45”);
dayshift.setText(“班次”);
第1天:挫折资源(R.color.A);
第2天:挫折资源(R.color.A);
第3天:挫折资源(R.color.A);
第4天.挫折资源(R.color.A);
夜班;
夜1.挫折资源(R.color.C);
夜间2.挫折资源(R.color.C);
3.挫折资源(R.color.C);
4.挫折资源(R.color.C);
}
}
其他的
{
shiftLoop8();
}
}

堆栈溢出的一个常见原因是大量递归调用——要么是由于导致无限递归的错误,要么是因为代码的结构只是具有非常深的递归

在您的情况下,堆栈溢出可能是由于您的代码可能有相当大的递归调用深度。能否将递归调用重新构造为while循环?例如,而不是:

if (d7 != doy && d7 < 366)
{
    d7 = d7 + 8;
    shiftLoop7();
}
if(d7!=doy&&d7<366)
{
d7=d7+8;
shiftLoop7();
}
你能做以下几件事吗

while (d7 != doy && d7 < 366)
{
    d7 = d7 + 8;
}
while(d7!=doy&&d7<366)
{
d7=d7+8;
}

堆栈溢出的一个常见原因是大量递归调用——要么是由于导致无限递归的错误,要么是因为代码的结构只是具有非常深的递归

在您的情况下,堆栈溢出可能是由于您的代码可能有相当大的递归调用深度。能否将递归调用重新构造为while循环?例如,而不是:

if (d7 != doy && d7 < 366)
{
    d7 = d7 + 8;
    shiftLoop7();
}
if(d7!=doy&&d7<366)
{
d7=d7+8;
shiftLoop7();
}
你能做以下几件事吗

while (d7 != doy && d7 < 366)
{
    d7 = d7 + 8;
}
while(d7!=doy&&d7<366)
{
d7=d7+8;
}

TLDR;您需要将其剥离到我们看到问题所需的最小值。这应该是相当容易的,因为你实际上得到的是一个异常,而不是挂起或崩溃等。太多的代码-而且你似乎没有任何地方引用setScale。我没有在任何地方使用setScale,这就是为什么我想知道它指的是什么。但现在一切都好了,谢谢你们的帮助@SkateJerryScoate-如果您包含stacktrace,我们可能能够回答这个问题…TLDR;您需要将其剥离到我们看到问题所需的最小值。这应该是相当容易的,因为你实际上得到的是一个异常,而不是挂起或崩溃等。太多的代码-而且你似乎没有任何地方引用setScale。我没有在任何地方使用setScale,这就是为什么我想知道它指的是什么。但现在一切都好了,谢谢你们的帮助@SkateJerryScoate-如果你加入stacktrace,我们可能会回答这个问题…这就是我要给出的答案,你的通话深度到最后可能是366次,这对于移动设备来说太多了。非常感谢快乐的Dave,这似乎解决了我的问题。我喜欢StackFlow。这就是我要给出的答案,你的通话深度到最后可能是366次,这对于移动设备来说太多了。非常感谢Dave,这似乎解决了我的问题。我喜欢StackFlow。