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);
}
}
}
}
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…
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
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
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…
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]
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
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: