一个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,为什么啊?请指教!
...全文
29 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
无欲则钢 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是局部变量把,把它放到方法外部试试看。

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧