eu posso retornar um metodo para mostrar valores de um vetor?to fazendo isso por que tenho que mostrar em uma gui a ordem dos
numeros utilizando fibonacci só que só consigo mostrar o ultimo numero, então resolvi jogar todos os valores em um vetor pra depois
mostrar ele na tela, só que ta ocorrendo erro no System.out.println(" aaaaaa:" + fibo[i]);//erro aqui e no return fibo[i];
não to conseguindo descubrir o porque ocorre esse erro pois o System.out.println(" Elementos Fibonacci:" + fibo[i]); mostra as informações corretas.
Se alguém poder da uma dica ai ficarei grato…
public int Fibonacci() {
return this.Fibonacci(this.getValor());
}
private int Fibonacci(int numero) {
int a = 1, i;
int fibo[] = null;
fibo = new int[numero];
for (i = 0; i <= numero;) {
if (i <= numero) {
System.out.println(" valor de x:" + numero);
System.out.println(" valor de i:" + i);
fibo[i] = i;
System.out.println(" Elementos Fibonacci:" + fibo[i]);
i = i + a;
a = i - a;
}
System.out.println(" aaaaaa:" + fibo[i]);//erro aqui
}
return fibo[i];
}
Não sei se entendi muito bem, mas acredito que seja mais fácil você guardar os valores numa classe como Vector, ou ArrayList.
[code]private Vector Fibonacci(int numero) {
int a = 1, i;
int fibo[] = null;
fibo = new int[numero];
//*******
Vector v = new Vector();
for (i = 0; i <= numero;) {
if (i <= numero) {
System.out.println(" valor de x:" + numero);
System.out.println(" valor de i:" + i);
//******
v.add(i);
fibo[i] = i;
System.out.println(" Elementos Fibonacci:" + fibo[i]);
i = i + a;
a = i - a;
}
System.out.println(" aaaaaa:" + fibo[i]);//erro aqui
}
return v;
}[/code]
Bem, pelo que estou vendo no seu código, dentro do seu laço for você está mostrando o elemento atual e no retorno do seu método você está retornando somente o último elemento do seu vetor e não o seu vetor por completo (fibo[i] e não apenas fibo).
Fiz um método para gerar a sequência e armazenar em um vetor de inteiro. Este método simplesmente armazena no vetor que é retornado pelo método. Verifique que para mostrar a sequência de fibonacci neste caso, você terá que percorrer o vetor a partir da posição 1 e não da 0.
public int[] fibonacci(int numTermos) {
int [] seq = new int[numTermos+1];
seq[0] = 0;
seq[1] = 1;
for(int i=2;i<seq.length;i++) {
seq[i] = seq[i-1]+seq[i-2];
}
return seq;
}
Espero ter ajudado.
Você pode tanto retornar, quanto passar vetores como parâmetro:
[code]public static int[] geraVetor() {
int x[] = new int[10];
for (int i = 0; i < 10; i++) {
x[i] = i*i+1;
}
return x;
}
public static void imprimeVetor(int[] vetor) {
for (int elem : vetor) {
System.out.println(elem);
}
}
public static void main(String[] args) {
int vetor[] = geraVetor();
imprimeVetor(vetor);
}[/code]
obrigado a todos que ajudaram agora funcionou,só não consegui entender por que não ta funcionando do geito que eu estava tentando fazer se a logica é praticamente a mesma,antes de vocês responderem aqui tinha alterado o codigo ai tinha parado de dar erro porém não mostra corretamente. se eu pedir pra fazer a fibonacci de 12 ele mostra 12 = [0, 1, 2, 3, 0, 5, 0, 0, 8, 0, 0, 0].se dá um System.out.println mostra corretamente 12 = 0,1,1,3,5,8. será que o problema é com o toString?
Usando a classe vector funcionou que e uma beleza.Na api diz que e pra retornar como String os valores do array.Voltam dá pra ver que eles voltam mais voltam em posições diferentes.
Se não é pedir de mais,mais se alguém souber me dizer só por que ele faz isso,serei grato.
gui//
mostrar na tela
case 2:
str += " = " +java.util.Arrays.toString(atual.Fibonacci()) + "\n";
break;
private int[] Fibonacci(int numero) {
int a = 1, i;
int fibo[];
fibo = new int[numero];
for (i = 0; i <= numero;) {
int vetor[]= new int[9];
fibo[i] = i;
System.out.println(" Elementos Fibonacci:" + fibo[i]);
i = i + a;
a = i - a;
}
return fibo;
}
public int[] Fibonacci() {
return this.Fibonacci(this.getValor());
}
No primeiro caso vc declarou a função como int, não int[].
Ou seja, vc disse ao java que iria retornar um único inteiro, não um vetor de inteiros.
Era esse o seu problema.
Só algumas correções na sua função:
- Declare as variáveis o mais próximo possível de onde for usa-las (o int, por exemplo, pode ser declarado dentro do for);
- Tem um vetor sendo criado dentro do for que não está sendo usado;
- Você pode criar o array fibo e inicializa-lo na mesma linha.
- Evite mexer no valor de i, se ele estiver sendo usado dentro de um for.
- Tente tornar o algoritmo mais próximo da fórmula clássica. Isso torna ele mais claro. É difícil para quem for analisar seu algoritmo perceber se i e a estão sendo calculados da maneira correta.
- Depois de pronto, deixe para fazer a impressão (System.out.println) fora da função.
Por exemplo:
public class Teste {
private static int[] fibonacci(int numero) {
if (numero == 0)
return new int[] {0};
else if (numero == 1)
return new int[] {0,1};
int fibo[] = new int[numero+1];
fibo[0] = 0;
fibo[1] = 1;
for (int i = 2; i <= numero; i++) {
fibo[i] = fibo[i-1] + fibo[i-2];
}
return fibo;
}
public static void main(String[] args) {
System.out.println("Elementos de fib de 7:");
for (int num : fibonacci(7))
System.out.print(num + " ");
}
}
Se quiser ler mais sobre fibonacci e ver outros métodos de calcula-lo, veja esse post:
http://www.guj.com.br/posts/list/57712.java#303559