Uma ajuda aqui

Estou começando agora a programar, já li varias vezes o tutorial da Caelum…ao menos umas 5 vezes ele todo
Estou lendo agora sobre, lógica de programação, sei qeu juntando tudo ate agora só fiz isso:
No tutorial da Caelum tem exercicios, um ate agora dificil é esse: Imprimir os numeros de Fibonacci de 0 a 100, usando somente
duas variaveis. Só queria esclrecer duvidas, eles dizem duas variaveis, tenho a variavel “i” mas so no contador, ou isso não vale?
E tb pq meu código não para quando chega no 1oo? for (i = 0; i < 100; i++)


class teste3 {
    public static void main(String[] args){

int x = 0;
int y = 1;
int i = 0;

for (i = 0; i < 100; i++) {

    if (x <= 0)

    System.out.println("0");
     
      x = x + y;
      y = x - y;
  
    System.out.println(x);
  
       }
   }
}

Agradeço qualquer ajuda pra entender o que está acontecendo neste pequeno código.
PS: isso e dificil mesmo de fazer, ou eu ainda sou muio leigo mesmo em lógica de programação?

não sei como seria este exercicio, mas nao seria isso que vc quer fazer??
coloquei para imprimir o i para vc ver que para no 99

sds

class teste {   
    public static void main(String[] args){   
  
int x = 0;   
int y = 1;   
int i = 0;   
  
for (i = 0; i < 100; i++) {   
  
    if (i <= 0) {
    	 System.out.println(x);   
    	
    } else {
  
   
       
      x = x + y;   
      y = x - y;   
     
    System.out.println(x);
    System.out.println(i);
    } 
       }   
   }   
}  

Não, queria que ele imprimisse a sequencia do Fibonaci, que seria: 0-1-1-2-3-5-8-13-21-34-55-89.

coloca o enunciado do exercicio ai

ah, ele tb não parou no 99 com esse exemplo acima, a sequenci dos numeros começa com o zero, ai soma com o “1” e sai o primeiro resultado, 1, como esta acima 0+1=1
acima esta 0-1-1, seguinte 1+1=2, seguinte 2+1=3
ai formamos a sequencia: 0-1-1-2-3-5…

    public static void main(String[] args) {   
        int x=0;   
        int y=1;   
        int b=1;   
           
        for(int i=0;i<=100;i++){   
            System.out.println(x+",");   
            b=x;   
            x=x+y;   
            y=b;   
               
            if(x>100){   
                break;   
            }   
        }   
    }   
  
}  

testa essa

ai obrigado o contador parou no 100, deixa eu ver agora se consigo o codigo da maneira certa, qualqeur coisa volto aqui, senão vc me entrega ele pronto rsrsrsr, mas so pode me responder: eles qeurem qeu seja somente duas variaveis, a do contador tb é variavel, será qeu vale, pq ai teria 3, o exercico diz claramente , somente duas variaveis

Tenta assim, eu não tive como testar pois estou sem eclipse aqui!

[code]public static void main(String[] args) {

int[] x = new int[100];
x[0] = 0;
x[1] = 1;
for(int i=2;i<=100;i++){

x[i] = x[i-1] + x[i-2];
System.out.println(x[i]);
}

} [/code]

Dessa maneira se usa apenas duas variaveis.

Posso estar enganado, mas vc colocou um array nisso aqui?
Bom se foi, ainda bem…pq pra mim não serve, nem qeu ele funcione…desculpe estar sendo rude, mas não qeuro o código pronto, queria que alguem pudesse comentar meu primeiro código lá em cima, isso pra mim seria de grande ajuda, tentei entender o pq ele está fazendo da maneira com está, mas mesmo colocando em papel, ele me pareceu confuso, pq pelo qeu vi ele teria qeu parar em 100 como esta no contador, mas não para, ah so pra saber tenho qeu fazer isso somente com if e for… obrigado pela ajuda

[quote=javaini]Posso estar enganado, mas vc colocou um array nisso aqui?
Bom se foi, ainda bem…pq pra mim não serve, nem qeu ele funcione…desculpe estar sendo rude, mas não qeuro o código pronto, queria que alguem pudesse comentar meu primeiro código lá em cima, isso pra mim seria de grande ajuda, tentei entender o pq ele está fazendo da maneira com está, mas mesmo colocando em papel, ele me pareceu confuso, pq pelo qeu vi ele teria qeu parar em 100 como esta no contador, mas não para, ah so pra saber tenho qeu fazer isso somente com if e for… obrigado pela ajuda[/quote]

Cara, parabéns pela atitude de querer aprender, mas realmente tá faltando um pouco de lógica pra você…

Seu for está executando exatamente 100 vezes, nada a mais e nada a menos que isso… o que acontece é que logo no inicio você faz um IF e verifica se X é menor ou igual a 0 e se for, você imprime 0…

Em determinado momento ocorre que essa expressão y = x - y; vai gerar um número negativo que fará com que essa expressão x = x + y; também deixa x < 0, logo ele está imprimindo mais linhas do que o comum… meus 2 cents de contribuição…

class Teste3 {  // teste3 diferente de Teste3... comece a usar a convenção Java para nomear suas classes
	       
	public static void main(String[] args){  
	   int x = 0;  
	   int y = 1;  
	   // tirei a declaração de int i daqui e coloquei dentro do for, fica mais simples de ler e deixa i como variavel de escopo do laço; 
	   for (int i = 0; i < 100; i++) {
	       if (x <= 0)  
	    	   System.out.println("0");  
	          
	       x = x + y;  
	       y = x - y;  
	       System.out.println(x);
	       System.out.println("i:" + i); // aqui só mandei imprimir o i pra vc poder ver o contador executando apenas de 0 - 99, ou seja, 100 vezes
	   }  
	}  
} 

cara… fazendo uns testes nos teus códigos, verifiquei que com as 100 posições será impossível fazer Fibonacci com tipo int…

Dica: int tem o tamanho de 32 bits e tem um intervalo que vai de -x até x, logo se teu numero ultrapassar os bits desse valor, o proximo bit começa a afetar o sinal do teu número…

Bons estudos…

PS: se desistir tenho o código pronto… tá igual o teu, só tem 2 diferenças…

[EDIT] - ou seja, não estava faltando lógica pra você… heueheue

Oi javaini,

Será que é isso que você quer…testa ai… :roll:


import javax.swing.JOptionPane;
class fibonacci
{
   public static void main(String args[])
   {
       int i, num_anterior, num_atual, novo_numero;
       num_anterior = 0;
       num_atual = 1;
       String mensagem = " O 1- numero fibonacci  1\n";
       for(i=2;i<=100;i++)
       {
             novo_numero = num_atual + num_anterior;
             num_anterior = num_atual;
             num_atual = novo_numero;
             mensagem = mensagem +  " O "+i+". numero fibonacci e "+novo_numero+"\n";
       }
       
          System.out.println(mensagem);
          //JOptionPane.showMessageDialog(null,mensagem);

   }
}

vlw ai por todos qeu ajudaram, as respotas ajudaram aqui, vou continuar com logica de programção, mas vou falr ta meio dificil, to tentando como dizem na logica, faço as coisa primeiro sem ser codigo, depois tento passar em codigo, pelo qeu dizem está certo assim, ou não, logo abre curso aqui, ai paro de encher, é qeu queria entrar lá com alguma bagagem…

entendi pouco mais agora, vou tentar fazer como pede o exercicio…

Isso mesmo,deve desenvolver a lógica primeiro…Você é esforçado heim,parabéns e não desista…

Boa sorte! :wink:

Da uma olhadinha aqui,vai ajuda-lo a entender… :wink:

http://pt.wikipedia.org/wiki/N%C3%BAmero_de_Fibonacci#Algoritmo_em_Java

Me desculpe por ter entregado a resposta pronta e parabéns pela atitude de não querer código pronto.
Apenas mostrei uma forma de utilizar menos variáveis.

[quote=javaini]Posso estar enganado, mas vc colocou um array nisso aqui?
Bom se foi, ainda bem…pq pra mim não serve, nem qeu ele funcione…desculpe estar sendo rude, mas não qeuro o código pronto, queria que alguem pudesse comentar meu primeiro código lá em cima, isso pra mim seria de grande ajuda, tentei entender o pq ele está fazendo da maneira com está, mas mesmo colocando em papel, ele me pareceu confuso, pq pelo qeu vi ele teria qeu parar em 100 como esta no contador, mas não para, ah so pra saber tenho qeu fazer isso somente com if e for… obrigado pela ajuda[/quote]

Afff…que fora…não tinha lido isso…foi mal… :oops:

Cara… estás no caminho certo… trabalhe bem sua lógica de Programação e não desista… como te falei… você não foi no rumo errado, tava com a lógica boa para o que estava precisando (fazer Fibonacci com 2 variáveis)

Bom… a galera colocou aí com int puro… testei aqui e não funcionou, porque a partir de um determinado ponto, o valor de x estrapolava o tamnaho de um tipo int e começava a mudar o sinal do valor (não te preocupa com isso agora)… Por isso fiz assim:

public static void main(String[] args){  
	   BigInteger x = new BigInteger("0");  
	   BigInteger y = new BigInteger("1");  
	    
	   for (int i = 0; i < 100; i++) {
	       if (x.intValue() == 0)  
	    	   System.out.println("0");  
	          
	       x = x.add(y);  
	       y = x.subtract(y);
	       System.out.println(x);
	   }  
	}

Detalhe, pra poder fazer o fibonacci dos 100 primeiros números só troquei a variável de int para BigInteger

Abs :wink:

eu não sei se entendi direito, mas não são os 100 primeiros números de fibonacci, são os números de fibonacci de 0 a 100.

E só para te fazer quebrar um pouco mais a cabeça, dá para fazer somente com o contador e mais uma variável (justamente por ser de 0 a 100, e não os 100 primeiros).

Para te ajudar um pouco, pensa assim, o seu contador não precisa necessariamente ser acrescentado de 1 em 1, mas pode ser acrescentado pelo valor de uma outra variável, vou dar um exemplo:

int x = 0;
for(int i = 0; i<=100; i+=x){x++}