一个JAVA菜鸟问题.

vince2000au 2004-05-05 10:20:34
偶要输入一个数字,返回这个数字的长度.比如说123,返回就是3.输入4567返回就是4.
void counter(int num)
{
int i = 1;
if(num < 10 )
{
System.out.println(i);
}
else
{
counter(num%10);
i++;
}
}

但结果总是1,为什么啊?请指教!
...全文
12 9 点赞 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
无欲则钢 2004-05-06
就是在他执行到counter(num/10)时就转如下一个层中去了,这一层中的以后的代码就要等到返回后才执行的。你是计算机专业的吗?是的话你为什么没好好学西教科书?不是的话你就去找本大学教科书去看看。这是函数调用的细节知识。
  • 打赏
  • 举报
回复
vince2000au 2004-05-06
哦,明白了,I放后面了,就不被执行了,跳到外面去了.对吗?谢谢楼上的,我不是计算机专业的,但对JAVA有点兴趣.
  • 打赏
  • 举报
回复
vince2000au 2004-05-05
谢谢楼上个位,我问题解决了.
static int i = 1;

private static void counter(int num)
{
if(num < 10 )
{
System.out.println(i);
}
else
{
i++;
counter(num/10);
}
}
我最后是这样的,但不明白为什么i++,一定要在counter(num/10);前面,后面为什么不行?
  • 打赏
  • 举报
回复
haoqingshi 2004-05-05
public class test{
public int counter(int num){
if(num < 10 )
{
return 1;
}
else
{
int i=1;
while(num>=10){
i++;
num=num/10;
}
return i;
}
}


public static void main(String args[]){
test t=new test();
int j=t.counter(1234256);
System.out.println(j);
}
}
  • 打赏
  • 举报
回复
sean_gao 2004-05-05
int counter(int num){
return (num<10) ? 1:(counter(num/10)+1);
}

这样就可以了,别人的方法似乎都有问题。(楼上的代码沿用了"%",这是错的)
  • 打赏
  • 举报
回复
无欲则钢 2004-05-05
你没次先是递归,再i++等你递归递到num<10的时候i其实还是1,返回后才加i的。
再有i是个局部的变量,把它变成类变量。
int i;
void counter(int num)
{
if(num < 10 )
{
System.out.println(i);
}
else
{
i++;
counter(num%10);

}
}
  • 打赏
  • 举报
回复
sean_gao 2004-05-05
"%"是不是应该是"/"?我觉得不用i更好,直接
return (num<10)? 1:(counter(num/10)+1);
呵呵。
  • 打赏
  • 举报
回复
minghuitian 2004-05-05
这个当然了,因为你在每次递归的时候变量i都定义并且初始化为1,所以当递归出栈的时候,只能打印1.
应该这样:
int counter(int num)
{
if(num < 10 )
{
return 1;
}
else
{
int i;
i = counter(num%10) + 1;
return i;
}
}

  • 打赏
  • 举报
回复
sean_gao 2004-05-05
i是局部变量把,把它放到方法外部试试看。
  • 打赏
  • 举报
回复
相关推荐
发帖
Java SE
加入

6.2w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2004-05-05 10:20
社区公告
暂无公告