[RESOLVIDO] Probleminha - Exercicios Fibonacci

4 respostas
B

Olá Pessoal,

Estou com um problema no exercicio sobre Fibonacci …
Na verdade é com manipulação de vetores, “Array fora de indice” no momento de compilar.
Segue o codigo e o erro da execução.

class Fibonacci {

    public static void main(String[] args) {
        int[] lst = {0, 1};
  
        for (int i = 2; i < 100; i++) {
            lst[i] = lst[i - 1] + lst[i - 2];
            for (int l : lst) {
                System.out.println("-> Soma :" + l);
            }
        }
    }
}

Erro:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
        at caelum.Fibonacci.main(Fibonacci.java:14)
Java Result: 1

Desde já agradeço. Aceito criticas e sugestões.

:slight_smile:

4 Respostas

DavidUser

cara para criar a sequência de fibonaci é muito simples:
recaptulando: 1,2,3,5,8,…
então:

//calculando até o 9 valor:
int x=1,y=2;
for(int i=1;i<=9;i++){
x+=y;//novo x=3
y+=x//novo y=5
}
System.out.println(x+","+y);

entendeu?

mas da forma que fez está correto, so que a seqüencia começa com 1,2 não 0,1 senão o codigo faz 0,1 a soma da 1 então 0,1,1,1,1,1,1,…

não tem como funcionar do geito que você fez se não definir o tamanho do array como 100 igual o “for”:

int[] lst = new int[100];
lst[0]=0;
lst[1] =1;
lst[2]=2;

viu q não tem necessidade de um array desse tamanho! Ele so vai servir para pesar na execução.

B

Muito Obrigado, só faltava essa parte mesmo.
Eu fiz como array para entender essa manipulação de dados …
mas muito interessante dessa outra maneira concatenando duas variaveis.

ViniGodoy

Você declarou um array de apenas 2 posições. Entretanto, está tentando iterar sobre ele até 100. Acontece que o array não cresce dinamicamente. Existem 2 saídas para o seu problema, se você quiser continuar usando uma estrutura assim (calcular primeiro, exibir depois).

  1. Iniciar o array com 100 posições. É a sugestão que o colega deu.

  2. Utilizar List, que se comporta como você pensou que o Array faria:

class Fibonacci {

    public static void main(String[] args) {
        List<Integer> lst = new ArrayList<Integer>;
        lst.add(0);
        lst.add(1);

        for (int i = 2; i < 100; i++) {
            lst.add(lst.get(i - 1) + lst.get(i - 2);
        }

        for (Integer l : lst) {
                System.out.println("-> Soma :" + l);
        }
   }
}
ViniGodoy

A sequencia começa em 0 e 1 mesmo. O 2 não é necessário.

Acompanhe:
0, 1, 1 (0+1), 2 (1+1), 3 (2+1), 5 (3+2)

Criado 25 de abril de 2009
Ultima resposta 25 de abr. de 2009
Respostas 4
Participantes 3