如何在下面的代码中解决此堆栈溢出错误?

时间:2020-03-04 19:14:42

标签: java

我正在尝试使用扫描仪方法查找数字的平方,但不断得到 堆栈流错误。我是编程新手,如果有人帮助我,我会很高兴。 我的代码如下

import java.util.Scanner;


interface Number {
    int findSqr(int i);  // Returns the square of n
}


//a class A which implements the interface Number. 

 class A implements Number {


   public int findSqr(int i) {

       return findSqr(i);

   }
}

public class Question5_1{ 
        public static void main (String[] args){ 
          A a = new A();   // an object of class A
           // Reading a number from the keyboard
           Scanner sc = new Scanner(System.in);  
           int i = sc.nextInt();
           System.out.print(a.findSqr(i)); 
    } 
}

2 个答案:

答案 0 :(得分:0)

按如下所示用return findSqr(i)固定以递归方式调用函数的行return i * i-

public int findSqr(int i) {
    return i * i;
}

答案 1 :(得分:0)

您所做的事情是无限递归的。它说的那句话

public int findScr(int i) {
    return findSqr(i)
}

本质上在return语句中无数次调用相同的方法。 发生的是,您执行了该方法,并尝试返回一个整数。但是,您编写的是一个return语句,该语句“返回”同一方法的另一个调用,因此它再次被执行。然后整个事情重新开始,所以您得到了StackOverflow。

由于没有其他代码了,所以我不知道您实际上要做什么,但是return findSqr(i)行是导致问题的原因。

最初,递归实际上可能是一个相当复杂的主题,我建议您暂时避免使用它(尽管它使您能够以一种非常优雅的方式解决许多问题)或尝试更好地理解它也许。我建议使用Wikipedia article关于递归的方法,尽管它很快变得很复杂,或者它上有任何其他教程,只需在Google上查找即可。