You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何这段Java代码会抛出StackOverflowError?

解决Java StackOverflowError问题:无限递归导致的栈溢出

你遇到的StackOverflowError根源非常明确——你的berechneZahlen方法里出现了无终止条件的无限递归调用,方法不断调用自身,最终耗尽了JVM的栈内存。

看你代码的第7行:

if (berechneZahlen(x, y, z) > 0) {

每次执行这个判断时,都会重新调用berechneZahlen(x,y,z),而新的方法调用里又会执行同一个判断,再次触发调用,就这样无限循环下去,直到JVM抛出栈溢出错误。

而你原本的需求是检查所有变量x、y、z是否都大于0,完全不需要调用方法自身来判断。我们来修正代码,精准贴合你的需求:

package arrayTest;

public class berechne {
    public static int berechneZahlen(int x, int y, int z) {
        // 直接判断所有变量是否都大于0
        if (x > 0 && y > 0 && z > 0) {
            return (x + y) / z;
        } else {
            System.out.println("0");
            return 0;
        }
    }

    public static void main(String[] args) {
        System.out.print(berechneZahlen(2, 3, 6));
    }
}

关键修改说明:

  • 把递归调用替换成直接检查x > 0 && y > 0 && z > 0,这才符合你“所有变量大于0时计算”的核心需求
  • 简化了逻辑:满足条件直接返回计算结果,否则输出"0"并返回0(因为方法声明返回int类型,必须保证所有分支都有合法返回值)
  • 移除了冗余的ergebnis变量,直接返回结果让代码更简洁直观

测试一下修正后的代码:

  • 当传入(2,3,6)时,三个数都大于0,计算(2+3)/6(int除法自动取整为0),控制台会输出0
  • 当传入包含负数的参数(比如(-1,2,3)),会先打印"0",然后main方法里再输出返回的0,最终控制台显示两行0

内容的提问来源于stack exchange,提问作者aatii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:57:35