解释这个程序背后的逻辑?

时间:2015-07-29 09:37:36

标签: java

我是编程的新手,今天我遇到了这个程序。我是如何得到3的输出?这里使用的行话很混乱。

class Demo 
{
public static void main(String args[])
{
    Demo d = new Demo(); // what does this really mean?
    System.out.println(d.someMethod(124)); 
}
public int someMethod(int x) 
{
    if(x<=0)
    return 0;
    return 1 + someMethod(x/10);
}
}        

5 个答案:

答案 0 :(得分:3)

以下是答案

1 + someMethod(12)
1 + 1+ someMethod(1)
1 + 1+ 1+ someMethod(0)
1 + 1+ 1+ 0
= 3

答案 1 :(得分:2)

重新格式化的评论课程:

class Demo {

    // static method used to start a Java application
    public static void main(String args[]) {

        // create a new instance of the Demo class
        Demo demo = new Demo(); 

        // call instance method someMethod and print the return value
        System.out.println(d.someMethod(124)); 
    }

    // someMethod is a recursive function, that is a function which 
    // calls itself until a stop condition is reached
    public int someMethod(int x) {
        // stop condition
        if(x <= 0) {
            return 0;
        }
        // recursive call
        return 1 + someMethod(x/10);
    }
}       

会发生什么:

1 call someMethod(124/10)
2 call someMethod(12/10)
3 call someMethod(1/10)
4 return 0 (because 1/10 == 0 the stop condition is reached)
3 return 1 + 0
2 return 1 + 1 + 0
1 return 1 + 1 + 1 + 0

所以返回值是3。

请注意,1/10 == 0因为结果被覆盖(删除剩余的小数以使其成为int)。

答案 2 :(得分:0)

首先,您创建一个名为d.Via的Demo对象,此对象可以调用名为someMethod(x)的方法。 如果输入参数是&lt; = 0或者在任何其他情况下1 + someMethod(x / 10),则此方法返回0.

答案 3 :(得分:0)

 Demo d = new Demo();

此行表示您正在使用名称&#39; d&#39;初始化一个新对象。来自一个名为Demo的类(也是你的主类)。如果您不了解对象和类是什么,请在其他地方阅读,因为它是Java中的一个非常重要的主题。 就个人而言,这对我帮助最大:https://docs.oracle.com/javase/tutorial/java/concepts/index.html

public int someMethod(int x) {

if(x<=0)
return 0;
return 1 + someMethod(x/10); }

这种方法有点像循环。您从以下位置传递了值124:

System.out.println(d.someMethod(124));

这里。如果它小于等于零,则检查124。事实并非如此:

 return 1 + someMethod(x/10);

124/10是12.4,但由于x是一个整数,它会将其四舍五入为12.并且程序一直持续到x <= 0,循环超过2次,如:

    1 + someMethod(12)
    1 + 1+ someMethod(1) // 12/10 is 1.2, but gets rounded to 1
    1 + 1+ 1+ someMethod(0) // 1/10 is 0.1, but gets rounded to 0

程序以传递的值为0结束。所以你得到3作为输出。

答案 4 :(得分:-1)

Demo d = new Demo()将调用演示类的构造函数。如果类中没有任何构造函数,那么 JVM 将创建一个默认构造函数。这就是Java中对象创建背后的概念。

并查看上一个答案someMethod(args)将如何执行。