有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

扫描程序中变量的递归Java输入值未应用于方法中的变量

我对Java相当陌生,所以请容忍我。我正在用Java制作一个递归方法,它允许我输入一个数字X,让系统以2的减量打印每个值,直到它达到1为止。(我必须添加一条规则,扫描仪也只能接受奇数)。我设置了扫描仪,但它似乎没有拾取我指定给n的值

public class Recursividad {

        public static int Func(int n)
        {
            if (n != 1)
                return 0;
            else 
                return Func(n-2);
        }

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int n = scan.nextInt();
    int x = Func(n);
    System.out.println(x);
}

}

输出总是0


共 (2) 个答案

  1. # 1 楼答案

    当你告诉你的程序return 0如果n!=1,那么它将return 0如果n != 1。因此,它总是打印出0,除非您将1作为参数传递,这将导致无限循环

    此外,如果您每次都想打印出一些内容,那么这样做的命令应该在函数内部,而不是外部。如果System.out.println被放在递归函数之外,它将只在整个递归完成后运行,因此,它将只打印最后一个数字

    你的代码应该是这样的

    public class Recursividad {
    
        public static int Func(int n)
        {
            System.out.println(n);
            if (n == 1)
                return n;
            else 
                return Func(n-2);
        }
    
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            int n = scan.nextInt();
            int x = Func(n);
        }
    }
    

    PS:也要考虑数字是否达到0或负值

  2. # 2 楼答案

    Dotol,它从扫描器获取输入并将其分配给n。但是在递归函数Func(int n)中使用的逻辑总是返回0,因为使用if(n!=1)意味着每当输入n以外的任何内容时,它总是返回0

    另外,你需要检查你的代码。此外,您还可以进行少量调试,以了解错误所在