黑马程序员技术交流社区
标题:
下面的代码哪里错了?
[打印本页]
作者:
D.man
时间:
2015-3-27 09:01
标题:
下面的代码哪里错了?
编译通过了,但是运行就出问题了。。。。。情境模拟是这样的:将一张厚度0.01米的纸不断对折,问几次后纸的高度为8848米?(早上看到一位朋友在论坛有询问,结果自己写的运行有问题),代码如下:
class Test_2
{
public int func(int i)
{
if(i == 1)
return 2;
else
return func(i-1);
}
public static void main(String[] args)
{
double sum = 0.00;
int count;
Test_2 t = new Test_2();
for(count=1; sum < 8848 ;count++)
{
sum = t.func(count)*0.01;
}
System.out.println("需要进行"+count+"次");
}
}
作者:
圣光忏悔
时间:
2015-3-27 14:13
public class Test_2 {
public int func(int i) {
if (i == 1)
return 2;
else
return func(i - 1);//这里调用递归? 无法理解
//递归这么调用那这里无论传过来的数字是多少,永远都只可能返回2
}
public static void main(String[] args) {
double sum = 0.00;
int count;
Test_2 t = new Test_2();
for (count = 1; sum < 8848; count++) {
// 这里sum一直被不停的赋值,由于t.func只可能返回2,所以 sum 不停的被赋值0.02
// 永远满足不了条件,for循环就会无限循环下去.
sum = t.func(count) * 0.01;
}
System.out.println("需要进行" + count + "次");
}
}
复制代码
思路有问题
作者:
D.man
时间:
2015-3-27 18:27
圣光忏悔 发表于 2015-3-27 14:13
思路有问题
thank you!知道错在哪里了,想算2的阶乘的,原来是递归错了。
作者:
longlongint
时间:
2015-3-27 18:39
都解决了,来看看
作者:
D.man
时间:
2015-3-27 18:46
将代码修改如下,就搞定了,感觉思路上好像走了很大弯路,先这样吧。
class Test_2
{
//2的乘方运算
public int func(int i)
{
int sum = 1;
for(int x = 1;x <= i;x++)
sum *= 2;
return sum;
}
public static void main(String[] args)
{
double sum = 0.00;
int count;
Test_2 t = new Test_2();
//计算高度值
for(count=1; sum < 8848 ;count++)
{
sum = t.func(count)*0.01;
}
count--;//因为计数器从1开始计数,所以要-1;
System.out.println("需要进行"+count+"次");
}
}
作者:
大手牵小手
时间:
2015-3-27 20:36
涨知识了!
作者:
Grady
时间:
2015-3-27 21:32
加油
作者:
佐佑
时间:
2015-3-27 21:37
提示慢慢调就是了啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2