VS报错Exception in thread "main" java.lang.NoSuchMethodError: chapter07.B.peach(I)I

package chapter07;

public class Houazi {
    
    public static void main(String[] args) {
    B t1 = new B();
    int day = 1;
    int peachNum = t1.peach(day);
    if(peachNum != -1){
        System.out.print("第x天有"+peachNum+"个桃子");
    }
}

}
class B{
    public int peach(int day){
        if(day==10){//第十天只有一颗桃
            return 1;
        }else if(day>=1 && day<=9){
            return (peach(day+1)+1)*2;
        }else{
            System.out.print("day在1-10");
            return -1;
        }
    }
}

VS报错:Exception in thread "main" java.lang.NoSuchMethodError: chapter07.B.peach(I)I
at chapter07.Houazi.main(Houazi.java:8)
搜索了很久不知道怎么解决

望采纳。。。

我看了下你的代码,没有问题,唯一可能的问题是VSCode,识别不出你的class B。

你这样,你把class B代码移动到另一个B.java的类文件里面,然后在Houazi.java的main方法中调用并初始化class B,即可。

这个错误是因为 B 类中的 peach 方法在递归调用时调用了自身而导致的。 在调用 peach 方法时编译器会抛出 java.lang.NoSuchMethodError 异常。

可以修改方法 peach 通过设置一个变量来记录自身递归次数来解决问题:

class B{
    public int peach(int day){
        int result = 0;
        if(day==10){//第十天只有一颗桃
            return 1;
        }else if(day>=1 && day<=9){
            for(int i=1;i<=day;i++){
                result = (result+1)*2;
            }
            return result;
        }else{
            System.out.print("day在1-10");
            return -1;
        }
    }
}

这样就可以避免自身递归调用导致的错误。