我是编程的新手,今天我遇到了这个程序。我是如何得到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);
}
}
答案 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)
将如何执行。