arraylist中的斐波那契序列

问题描述 投票:0回答:8

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

题:

- 使用Java

-Main类向用户询问整数输入(斐波那契N项),然后按顺序继续计算所有斐波纳契数,直到达到该项。

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

例如,我的目标是这样:

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

10

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

ArrayList:[1,1]

现在,在用户输入后,我试图使我的arraylist看起来像这样:

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

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

我没有问题打破数字,它只是“计算”给我一个艰难的时间..提前感谢任何建议

java math arraylist fibonacci
8个回答
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
投票

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


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;

} 

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


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[]={"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""};

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)+ " ");
        }
    }

}

0
投票
  1. 写一个经典的(刚刚,非正则,用于Java)Fibonacci函数。
  2. 好的,你不需要fib(N),所以改变你的循环测试,使其继续,直到达到> = N.
  3. 此外,您不希望返回int,而是返回ArrayList。因此,在您的函数中创建一个,在循环中添加它,然后返回它。
  4. 哦,你也想做那个奇怪的数字事情。不要改变你的功能#3;相反,使用它来获取Fibonacci数字的ArrayList,然后迭代它,将数字添加到新的ArrayList。

替代#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的生成。


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);

        }
}

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);
    }
© www.soinside.com 2019 - 2024. All rights reserved.