Java 解释这个程序背后的逻辑?
我是一个编程新手,今天我遇到了这个程序。我是如何得到输出为3的?这里使用的行话相当混乱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)
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