Porque a variável recebe outro valor dentro do for? (Exercício de Fatoriais - FJ11)

8 respostas
julhao666
Olá pessoal, sou iniciante em JAVA, comecei a estudar pela apostila da Caelum FJ11 - Java e Orientação a Objetos. Já trabalho com PHP e agora resolvi aprender JAVA. Há um exercício na apostila, onde eu tenho que exibir todos fatoriais de 1 a 10, e após um dia inteiro tentando fazer sem olhar pronto na internet, eu resolvi procurar no google, e achei um código, muito mais simples do que eu tava fazendo o código é o seguinte:
int fatorial = 1;
		for (int n = 1; n <= 10; n++){
			 
			 fatorial = fatorial * n;
			 System.out.println(fatorial);
		}
Pois bem, a variavel fatorial recebe valor "1" lá no inicio, mas depois que começa o for, a variavel é utilizada novamente para fazer uma multiplicação com o n (que aumenta +1 até n = 10), mas então, por exemplo, se n = 3, então fatorial (que é 1) * n não seria 3? Mas o programa exibe o número "6". Eu sei que tem alguma explicação pra isso, mas como eu to aprendendo agora, talvez tenha passado despercebido pela apostila. Vou colocar aqui os número que aparecem quando n tem o valor de 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 respectivamente: 1 2 6 24 120 720 5040 40320 362880 3628800 Muito obrigado pessoal, agradeço a todos que tentarem me ajudar! Abraços.

8 Respostas

pmlm

Para pensares um pouco:
Quando n for 3 será que fatorial será (ainda) 1? Qual foi o último número que ele imprimiu antes?

drsmachado
 ouviu falar em teste de mesa?

Bom, é mais ou menos assim. Você isola as variáveis (que nada mais são que referências para valores que serão trabalhados) e, de acordo com o andamento do programa, você vai anotando as diversas alterações que podem ocorrer com cada uma das variáveis.

Por exemplo, logo no início da primeira execução do for, temos o seguinte:

n = 1;

fatorial = 1;

Após a primeira execução, temos:

n = 1;

fatorial = 1 (1 * 1);

No início da segunda, temos:

n = 2;

fatorial = 1;

Ao fim da segunda:

n = 2;

fatorial = 2 (n = 2 * fatorial = 1);

E, agora, responda o que o pmlm perguntou.
E

O sr. Julhao parece ser uma pessoa que entenderia melhor o paradigma funcional que o imperativo.
De fato, o conceito de “variável” não é trivial e não tem um correspondente simples na matemática ( http://en.wikipedia.org/wiki/Monad_(functional_programming) ).

julhao666

pmlm
Quando n for 3, o fatorial é 2, ali no código, pra dar resultado 6. (3 * 2 = 6)

drsmachado
Entendi mais ou menos o que tu disse.

Mas eu ainda não entendi porque o fatorial muda de valor.
Desculpa se estou meio lento pra entender, auauau, mas é que não entendi mesmo.

E

“variável” quer dizer “algo que varia ou que muda”. É esse o significado em Java - variável é uma posição de memória que contém um valor que pode mudar à medida que o programa vai sendo executado. As mudanças normalmente são feitas via atribuição (ou seja, com o sinal de “=”).

R

Acho que entendi sua duvida, sera ?

for (int n = 1; n <= 10; n++){  
       
     fatorial = fatorial * n;  
     System.out.println(fatorial);  
}

Simples, voce define um valor FORA do laço for certo ? quando ele entra no for, ele executa a instrucao do for ate N = 10, DEPOIS que ele sai do laço for, ou seja, la fora o fatorial = 1, depois que ele entra no for ele recebe varios valores, mas ele NAO VOLTA para as linhas antes do for, fui claro ?

igor_ks

ou seja, o que o entanglement quis dizer é que

nesse trecho do codigo

fatorial = fatorial * n;

a variavel fatorial, vai receber o valor de ela mesmo vezes o valor de n

se estive somente assim: (voce pode fazer este teste para ver)

fatorial = n;

a cada iteração (isso mesmo, iteração e não interação), sua variavel fatorial receberia +1, pois seu for incrementa +1 no final (n++)

julhao666

Obrigado a todos, que me ajudaram, eu entendi o motivo de que ele muda o valor, é que eu pensava que o fatorial sempre ia ter o valor “1” ou 1 * n, e não que ele ia ter o valor da última multiplicação.

Agora eu entendi, é bem simples, mas obrigado a todos que me ajudaram, perguntei essa mesma pergunta em 3 Fóruns, e esse foi o único que me deram respostas, muito obrigado!

Abraços!

Criado 14 de fevereiro de 2013
Ultima resposta 14 de fev. de 2013
Respostas 8
Participantes 6