如果每个变量的值都大于零,我正在编写一个计算公式(x + y)/ z的方法。如果它们小于零,则控制台应打印" 0"。
我的代码如下所示:
package arrayTest;
public class berechne {
public static int berechneZahlen (int x, int y, int z) { //method
int ergebnis=0;
if (berechneZahlen(x, y, z) > 0) {
ergebnis = (x+y)/z; //ergebnis = result
}
else {
System.out.println("0");
}
return ergebnis;
}
public static void main(String[] args) {
System.out.print(berechneZahlen(2, 3, 6));
}
}
现在,在编辑器中我没有收到任何错误。一切似乎都很好。但是当我编译它时,它会给我这个错误十几次:
Exception in thread "main" java.lang.StackOverflowError
at arrayTest.berechne.berechneZahlen(berechne.java:7)
at arrayTest.berechne.berechneZahlen(berechne.java:7)
at arrayTest.berechne.berechneZahlen(berechne.java:7)
我无法弄清楚为什么代码无法正常工作。
答案 0 :(得分:2)
您在没有终止点的情况下以递归方式调用函数,因此导致StackOverFlowError
if (berechneZahlen(x, y, z) > 0)
相反,请引入您的代码以检查x, y, x > 0
是否符合您的要求:
如果每个变量的值都大于零。如果它们小于零,则控制台应打印" 0"。
if (x > 0 && y > 0 && z > 0) {
//bla bla
} else {
//print 0
}
答案 1 :(得分:1)
该方法以递归方式调用自身。试试这个:
public static int berechneZahlen (int x, int y, int z) { //method
int ergebnis=0;
if (z>0 && (x+y) > 0) {
ergebnis = (x+y)/z; //ergebnis = result
}
else {
System.out.println("0");
}
return ergebnis;
}
答案 2 :(得分:0)
有一些问题,但也有一些可以改进的事情。
导致错误的原因是你没有检查x,y,z是否大于0但是你正在检查这些数字的berechneZahlen
是否大于0,这导致它被递归调用。
此外,在其中一个为0的情况下,您在方法中打印“0”但是您还在主函数中打印berechneZahlen
的结果,导致“0”被打印两次,因此你可能只想在这种情况下返回0并且不在函数本身中打印它。
最后,我还会移除您的ergebnis
变量。这没错,但没有必要。你只需返回结果即可。
这将是您的最终结果
public static int berechneZahlen (int x, int y, int z) {
if (x > 0 && y > 0 && z > 0) {
return (x+y)/z;
} else {
return 0;
}
}
但是使用像这样的三元操作甚至可以缩短它
public static int berechneZahlen (int x, int y, int z) {
return (x > 0 && y > 0 && z > 0) ? (x+y)/z : 0;
}
答案 3 :(得分:0)
StackoverflowError
由 recursive call 引起。这意味着方法berechneZahlen()
正在调用自己。在那个电话中,它再次呼唤自己,在接下来的呼叫中,它再次呼唤自己,等等......
public static int berechneZahlen (int x, int y, int z) {
...
if (berechneZahlen(x, y, z) > 0) { // (fatal) recursive call here
...
}
每次调用都会在计算机内存上分配空间,直到内存完全填满数据并且没有剩余空间。在这一刻,程序执行失败了,因为它需要分配更多的空间来工作,但它不能分配更多。
这是一个适合您的工作解决方案,其中已删除递归:
public class berechne {
public static int berechneZahlen (int x, int y, int z) {
if (x < 0 || y < 0 || z < 0) {
return 0; // return 0, if one of the numbers is below zero
}
return (x+y)/z; // return normal calculated result
}
public static void main(String[] args) {
System.out.print(berechneZahlen(2, 3, 6));
}
}