Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将值传递给方法,然后打印它_Java - Fatal编程技术网

Java 将值传递给方法,然后打印它

Java 将值传递给方法,然后打印它,java,Java,我在一次采访中遇到了这个问题 public class NuVizzDemo { public static void main(String args[]){ int x=6; System.out.println("initial value of x is "+x); int y=getX(x); System.out.println("value of x after method is executed is "

我在一次采访中遇到了这个问题

public class NuVizzDemo {
    public static void main(String args[]){

        int x=6;
        System.out.println("initial value of x is "+x);
        int y=getX(x);
        System.out.println("value of x after method is executed is "+x);
        System.out.println("value of y is "+y);
    }

    private static int getX(int x) {
        // TODO Auto-generated method stub
        if(x==1){
            System.out.println("value of X is "+x);
            return 0;
        }
        else 
            System.out.println("value of x is "+x);
            return 1+getX(x-1);
    }

}
我想知道为什么y的值比x小1?

因为函数getX是并遵循以下模式:

x = 1: 0
x = 2: 1 + getX(1) = 1 + 0 = 1
x = 3: 1 + getX(2) = 1 + 1 + getX(1) = 1 + 1 + 0 = 2
...
编辑:您应该通过为x添加一个子句来使getX更加健壮,因为函数getX是并遵循以下模式:

x = 1: 0
x = 2: 1 + getX(1) = 1 + 0 = 1
x = 3: 1 + getX(2) = 1 + 1 + getX(1) = 1 + 1 + 0 = 2
...

编辑:您应该通过为x添加一个子句来使getX更加健壮,这样这个递归调用将执行5次,第5次返回值将为0,因为当x==1时,它将返回0

因此,当:

x = 1 -> 0
x = 2 -> 0 + 1 = 1
x = 3 -> 1 + 1 + getX(1) = 2
x = 4 -> 1 + 1 + 1 + getX(1) = 3
x = 5 -> 1 + 1 + 1 + 1 + getX(1) = 4
x = 6 -> 1 + 1 + 1 + 1 + 1 + getX(1) = 5

所以它是y=5。

所以这个递归调用将执行5次,在第5次时返回值将为0,因为当x==1时它将返回0

因此,当:

x = 1 -> 0
x = 2 -> 0 + 1 = 1
x = 3 -> 1 + 1 + getX(1) = 2
x = 4 -> 1 + 1 + 1 + getX(1) = 3
x = 5 -> 1 + 1 + 1 + 1 + getX(1) = 4
x = 6 -> 1 + 1 + 1 + 1 + 1 + getX(1) = 5
所以它是y=5。

因为

返回1+getXx-1

将为您提供值1+1+1+1+1+0=5,因为当x到达1时,您将明确返回0。

因为

返回1+getXx-1


会给你1+1+1+1+1+0=5的值,因为当x到达1时,你会明确地返回0。

你在面试中回答了什么?我真的不想回答这个问题,因为它会破坏面试官提出问题的努力。但是您可以运行代码,看看为什么会发生这种情况。旁注:您的else子句周围没有大括号。这不会影响结果,但它确实意味着缩进有点撒谎。您发现了一个带有//TODO自动生成方法存根!?如果你使用调试器一步一步地调试代码,你应该能够看到它在做什么。你在面试中回答了什么?我真的不想回答这个问题,因为它会破坏面试官提出问题的努力。但是您可以运行代码,看看为什么会发生这种情况。旁注:您的else子句周围没有大括号。这不会影响结果,但它确实意味着缩进有点撒谎。您发现了一个带有//TODO自动生成方法存根!?如果您使用调试器单步执行代码,您应该能够看到它在做什么。加1,一种缓慢的减去1的方法,或者如果将其设为0,则会得到StackOverflower错误;是的,这就是为什么我跳过了0:plus 1,这是一种缓慢的减去1的方法,如果你给它0,你会得到一个StackOverflower错误;是的,这就是我跳过0的原因: