arraylist中的斐波那契序列

时间:2012-02-04 08:24:53

标签: java math arraylist fibonacci

我正在寻找一个明确的解释我的问题(不寻找代码),但如果一些代码有助于解释自己,那么请做..谢谢:)

问题:

- 使用Java

- 主类要求用户输入整数(fibonacci N term),然后按顺序计算所有斐波纳契数,直到达到该项为止。

- 所有内容都存储在一个整数类型的arraylists中。 (每个数字都被分解并存储在它自己的索引中,因此它就是它自己的“元素”,可以这么说。)

例如,我的目标是这样:

“请输入N斐波那契术语:”

10

现在,在内部,我已将2个基本案例存储在一个arraylist中,如下所示:

ArrayList:[1,1]

现在,我想在用户输入之后让我的arraylist看起来像这样:

[1,1,2,3,5,8,1,3,2,1,3,4,5,5]

(注意它在最后一个学期停止了55,并注意到两位数值如何分解为单独的元素。)

我打破数字没有问题,它只是给我带来困难的“计算”...提前感谢任何建议

8 个答案:

答案 0 :(得分:2)

我将使用int值生成Fibonacci值,并使用这些结果分解数字以添加到ArrayList。

答案 1 :(得分:1)

听起来你想要从F1开始走斐腾纳奇序列,同时将数字作为整数追加到ArrayList<int>。由于你想要base-10中的数字,我认为如果你将中间的Fibonacci整数转换为字符串,然后将字符串中的每个字符串作为字符数组逐步执行,这将是最容易阅读的。单步执行它,您可以通过从中减去char'0'将每个数字转换回整数。然后,您可以将该数字的数字版本附加到ArrayList<int>。最终结果看起来像这样:

ArrayList<int> arrayList = new ArrayList<int>();

int a = 1;
int b = 0;
int n = 1;

while (n++ <= input) {  // input being from the user
    a += b;
    b = a - b;

    char[] fib = Integer.toString(b).toCharArray();
    for (int i = 0; i < fib.length; i++) {
        arrayList.add(fib[i] - '0');
    }
}

这里要说的是,当你走上斐波纳契数列时,你不会弄乱你的数值。相反,在确定将进入ArrayList<int>的每个数字的值之前,先缓存转换为字符串的'b'副本。

答案 2 :(得分:1)

当我试图复制Arraylist时,它出现了一个语法错误,而另一个响应没有足够的代码来显示它实际会做什么。无论哪种方式,你的老师给你的任务有点浪费编程。下面的内容将为您提供斐波那契数字的价值。 num是您想要的Fibonacci系列中的Fibonacci数。例如,如果你想要在你调用它时将fibi(6)放入系列中的第6个斐波纳契数。

public static int fibi(int num)
{
    int initial =0; int addtoinitial = 1;
    int keepinitial = 0;

    for(int i = 0; i <num; i++)
    {
        keepinitial = initial;
        initial = addtoinitial;
        addtoinitial = keepinitial + addtoinitial;
    }

    return initial;

} 

你修改它的方法,这样你就可以得到你的字符串数组,但是现在我需要去吃午餐

答案 3 :(得分:1)

下面是制作字符串数组的方法。和小于46的原因是因为这是公共数组初始化长度的长度,并且您无法更改初始化之外的长度。您可以更改其中的每个部分。实际上对于使用它们的值的int Fibonacci数字如果你试图使用高于第46个斐波纳契数的任何东西,它将超出int的最大值。如果你使用long,如果你试图使用第92个斐波纳契数以上的东西,它会超出最大值一段时间。

public static void fibsmake(int num) {
    fibsreallength= num;
    int initial = 0; 
    int addtoinitial = 1;
    int keepinitial = 0;

    for(int i = 0; i<num&&i<46; i++) {
        keepinitial = initial;
        initial = addtoinitial;
        fibs[i]=keepinitial+"+"+initial;
        addtoinitial = keepinitial + addtoinitial;
    }
}


public static String fibs[]={"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""};

答案 4 :(得分:1)

我认为这应该锻炼。

package p1;

import java.util.ArrayList;

public class NEWtEST {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList a =new ArrayList();

        a.add(0);// enter the 1st elemnt of the list
        a.add(1);// 2nd elemnt
        int currIndex=1;
        while(currIndex<50)//--- i set the limit as first 50 items
        {
            a.add(((Integer)a.get(currIndex))+((Integer)a.get(currIndex-1)));
            currIndex++;
            System.out.print(a.get(currIndex)+ " ");
        }
    }

}

答案 5 :(得分:0)

  1. 为Fibonacci函数编写一个经典的(刚刚,非正则的,用于Java)。

  2. 好的,你不想要fib(N),所以改变你的循环测试,使其继续,直到达到&gt; = N.

  3. 此外,您不希望返回int,而是返回ArrayList。所以在你的函数中创建一个,在你的循环中添加它,然后返回它。

  4. 哦,你也想做那个奇怪的数字事情。不要改变你的功能#3;相反,使用它来获取Fibonacci数字的ArrayList,然后迭代它,将数字添加到新的ArrayList。

  5. Alternate#4,如果Nishant是正确的:从#3返回的ArrayList的索引2循环并向后看,如

    sums.add("1");
    sums.add("0+1");
    for (int i = 2; i < fibs.size(); i++)
      sums.add(fibs.get(i - 2).toString() + "+" + fibs.get(i - 1));
    

    '当然,在这种情况下,您可以继续编辑原始的Fibonacci函数,并跳过fibs ArrayList的生成。

答案 6 :(得分:0)

我不擅长解释。但我认为这段代码可以满足您的要求。

import java.util.*;

public class Fibonacci {

        public static void main(String[] args) {
                long temp1=0;
                long temp2=1;
                long temp3;
                int temp4;
                //number of elements to generate in a series
                Scanner sc = new Scanner(System.in);
                ArrayList<Integer> list = new ArrayList<Integer>();
                System.out.println("Enter Number ");
                int num = sc.nextInt(); 
                if(num==0)
                list.add(0);
                else if(num==1)
                list.add(1);
                else 
                {
                    list.add(0);
                    list.add(1);
                //create the Fibonacci series and store it in an arraylist
                for(int i=1; i < num; i++){
                    temp3= temp1+temp2;
                    temp1= temp2;
                    temp2=temp3;
                    do{
                        temp4=(int) temp3%10;
                        temp3= temp3/10;
                        list.add(temp4);
                    }while(temp3!=0);
                }
                }
                //print the Fibonacci series numbers

                System.out.println("Fibonacci Series upto " + num);
                System.out.print(list);

        }
}

答案 7 :(得分:0)

    public static void main(String[] args) {
        List<Integer> numList = new ArrayList<>();

        Scanner sc = new Scanner(System.in);
        System.out.println("Please enter the size of the list:\n");
        int userInput = sc.nextInt();
        System.out.println("Your choose is"+" "+userInput);

        int a = 0;
        int b = 1;
        int c = 0;

        while(c<userInput) {
            c = a + b;
            a = b;
            b = c;

            numList.add(c);
        }

        System.out.println("Fibonacci list:"+" "+numList);
    }