Não era bem isso que eu estava pensando. Não sei se me expressei mal ou o que, mas vou tentar ser mais claro desta vez.
Vamos analisar a sintaxe e a semântica do comando for:
for(<inicialização> ; <condição> ; <expressão de iteração>){
// instruções a serem repetidas
}
Agora vamos ver seu código:
for(n=1, fatorial=1; // valores
n <= 10; // Faz o laço.
n++, fatorial = fatorial * n) //Vou acrecentar sempre 1 em cima do valor do N e farei a contar do fator
{
System.out.println("Fatorial de "+n + " é " + fatorial ); // Imprimir mensagem na tela.
}
Análogamente:
<inicialização> = n = 1, fatorial = 1 : Está ok, porém se as variáveis n e fatorial são usadas exclusivamente no for, elas poderiam ser declaradas aqui, evitando disperdício de memória caso houvessem mais linhas após o for.
<condição> = n <= 10 : Está ok, sem problema algum.
<expressão de iteração> = n++, fatorial = fatorial * n : Aqui que "mora o perigo", a instrução "n++" pode ser colocada aqui sem problema algum, já que ela que faz com que o loop "avance" e a variável n faz parte da condição de repetição. A instrução "fatorial = fatorial * n", porém, faz parte da solução do problema e não tem ligação com a condição da iteração (como se fizesse parte das tão faladas regras de negócio). Assim, o mais indicado é mover esta instrução para dentro do for (dentro do bloco), mais ou menos assim:
for (int n = 1, fatorial = 1; n <= 10; n++) {
fatorial = fatorial * n;
System.out.println("Fatorial de " + n + " é " + fatorial);
}
Desta forma, ocorre a separação entre o que define a repetição e o que exatamente ela faz. Repare também que a declaração das variáves n e fatorial agora ocorre dentro do for.
Desculpe se estou sendo chato ou coisa assim. Minha intenção apenas é que você escreva códigos com mais clareza e legibilidade. Nesta situação de cálculo de fatorial, o programa é bastante simples e a iteração também, porém é bom que você se acostume com as boas práticas desde o princípio, para que no futuro não saia escrevendo iterações deste tipo:
for ( x = 0, y = valorMaximo, z = 0 ; (x + z) < y; x + z - ((obterValorAtual() - obterDiferencaAtual()) * obterMultiplicadorAtual()) ) {
Este é um exagero, porém pode acontecer de uma iteração que seja clara para você pareça uma sopa de letrinhas para outro programador, ou para você mesmo quando precisar mexer na rotina que escreveu anos atrás.
Já que estamos falando em formatação de código, preste atenção também às chaves e à identação.
Seu código:
public class Exercicicio31{
public static void main(String []args){
// Exercio embaixo.
int n;
int fatorial;
for(n=1, fatorial=1; // valores
n <= 10; // Faz o laço.
n++, fatorial = fatorial * n) //Vou acrecentar sempre 1 em cima do valor do N e farei a contar do fator
{
System.out.println("Fatorial de "+n + " é " + fatorial ); // Imprimir mensagem na tela.
}
}
}
O padrão Java:
public class Exercicicio31 {
public static void main(String[] args) {
// Exercio embaixo.
int n;
int fatorial;
for (n = 1, fatorial = 1; n <= 10; /*Faz o laço.*/ n++, fatorial = fatorial * n /*Vou acrecentar sempre 1 em cima do valor do N e farei a contar do fator*/) {
System.out.println("Fatorial de " + n + " é " + fatorial); // Imprimir mensagem na tela.
}
}
}
Espero ter sido claro.
Dúvidas ou críticas, poste aí!