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

Java 解释这个程序背后的逻辑?,java,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)

我是一个编程新手,今天我遇到了这个程序。我是如何得到输出为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);
}
}        
类演示
{
公共静态void main(字符串参数[])
{
Demo d=new Demo();//这到底是什么意思?
系统输出println(d.someMethod(124));
}
公共整数方法(整数x)
{
如果(x下面是答案

1 + someMethod(12)
1 + 1+ someMethod(1)
1 + 1+ 1+ someMethod(0)
1 + 1+ 1+ 0
= 3
Demo d=new Demo()
将调用Demo类的构造函数。如果类中没有任何构造函数,则JVM将创建一个默认构造函数。这就是Java中对象创建背后的概念


查看前面的答案
someMethod(args)
将如何执行。

用注释重新格式化类:

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);
    }
}       
所以返回值是3


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

首先,您创建了一个名为d的演示对象。通过该对象,您可以调用一个名为somethod(x)的方法。 如果输入参数为,则此方法返回0 这一行表示您正在初始化一个名为“d”的新对象,该对象来自一个名为Demo的类(也是您的主类)。如果您不了解什么是对象和类,请在其他地方阅读,因为这是Java中一个非常重要的主题。 就我个人而言,这对我帮助最大:

此处,检查.124是否小于或等于零。否则,它将被传递到:

 return 1 + someMethod(x/10);

124/10是12.4,但由于x是一个整数,它将把它四舍五入到12。程序将一直运行到x,你不理解哪行代码?这不是行话。这是代码。我建议在你的声誉下降到1之前删除这个问题……为了了解这个程序所涉及的递归……这个问题的主题太模糊了OP基本上要求训练。为了教育起见:方法被调用3次(因为参数可以被10除以3次),因此“1”被返回3次并求和。
 Demo d = new Demo();
public int someMethod(int x) {

if(x<=0)
return 0;
return 1 + someMethod(x/10); }
System.out.println(d.someMethod(124));
 return 1 + someMethod(x/10);
    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