【JAVA】帮忙看下这个Fibonacci程序问题出在哪?尽量详细点!感激不尽

来源:百度知道 编辑:UC知道 时间:2024/06/07 04:59:31
class Number100{
public static void Fib(int i){
int f[]={};
f[0]=1;
f[1]=1;
for(i=2;;i++)
{
f[i]=f[i-1]+f[i-2];
int n=0;
n++;
if(n%10==0){
System.out.println(f[i]);
System.out.print("\t"+f[i]);
}
}
}
public static void main(String[] args){
Number100 num = new Number100();
num.Fib(50);
}
}

你这个程序不是一般的强……问题太多了。
1.Fib方法已经声明为静态了,那么main函数不必创建实例,可以直接通过类名来调用,即Number100.Fib(50)或Fib(50)。
2.Fib函数的意义应该是限制计算项数,可传到函数的50是由形参i接收的,而i又做为循环变量使用了,那么这个50根本没用上。
3.for循环没有条件,并且在循环体中也没有break语句结束循环,此循环将会无限循环下去。
4.你希望显示10个数据就换行,结果f[i]显示了2遍。
5.Fib函数中数组f[]初始化为空,没有元素,引用f[0]、f[1]等是错误的。
代码应该是这样。
6.既然数列数据你只需要显示而不做后续使用,那么没必要使用数组来存储每一项数据。可以直接通过循环实现计算显示。
7.50项后的数列项的值超过int的表示范围了,所以数据应该使用long型的。
8.50项后的数据值显示宽度早超过8个字符的,使用\t分隔并不能每列对齐的。
9.字符屏幕宽度80,如果按\t显示,10列正好一整行,不必换行就自动是下一行了。
class Number100{
public static void Fib(int n){
long f1=1,f2=1,f3;
System.out.print(String.format("%1$-20d%2$-20d",f1,f2));
for(int i=0;i<n-2;i++){
f3=f2+f1;
System.out.print(String.format("%1$-20d",f3));
f1=f2;
f2=f3;
}
}
public static void main(String[] args){
Fib(50);
}
}