【问题标题】:Java input value for variable from scanner isn't applying to variable in method来自扫描仪的变量的 Java 输入值不适用于方法中的变量
【发布时间】:2016-02-22 04:41:21
【问题描述】:

我对 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。

【问题讨论】:

  • 根据if (n != 1)的情况,每次都会返回0。

标签: java recursion increment decrement


【解决方案1】:

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

附:你需要检查你的代码。你也可以做一点调试来知道你错在哪里。

【讨论】:

    【解决方案2】:

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

    另外,如果你想每次都打印出一些东西,你的命令应该在你的函数内部,而不是外部。如果你的 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 或负数

    【讨论】:

    • 谢谢,效果很好 我不知道回报是如何工作的。我应用了您建议的更改并将 {if (n != 1)} 更改为 {if (n
    猜你喜欢
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 2013-08-20
    相关资源
    最近更新 更多