[RESOLVIDO OBRIGADO!]Dúvida sobre laço FOR -fatorial!

6 respostas
F

Olá pessoal não estou entendendo o que acontece entre esses dois laços de repetição não consigo entender por que na primeira iteração o segundo laço a variável w não muda o valor pra 2 pelo contrário ela permanece 1 e o programa passa a execução para a próxima linha que é o output.

Caramba já fiz outros exercícios e tenho certeza do funcionamento da estrutura de repetição FOR mas não entendo o que está acontecendo aqui nessa questão

Esse é um exercício para calcular fatorial GRATO PELA AJUDA !!!

// Exercise 5.8 Solution
// Factorial.java
// Program calculates factorials
import javax.swing.*;

public class Factorial {
   public static void main( String args[] )
   {
      JTextArea outputArea = new JTextArea( 5, 10 );
      int fact;
      String output = "X\tX!\n";
      
      for ( int z = 1; z <= 5; z++ ) {
         fact = 1;

         for ( int w = 1; w <= z; w++ )
            fact *= w;

         output += "\n" + z + "\t" + fact;
      }

      outputArea.setText( output );
      JOptionPane.showMessageDialog(
            null, outputArea, "Factorial", 
            JOptionPane.INFORMATION_MESSAGE );

      System.exit( 0 );
   }
}

6 Respostas

Luiz-SP

O código que vc postou parece certo, confira se esse código é mesmo o código que vc está usando!!

otaviojava

Eu não estou vendo a declaração da variável ‘z’
A depender do valor que ele esteja no caso maior que 6 ele pode nem entrar no laço

mews

Bom dia,

Executei esse código e deu certo.
Pelo menos levando em conta o cálculo fatorial.

Respondendo o nosso amigo ai de cima, a variável “z” está declarada no primeiro “FOR” como int.

dssimao

E ai Felipi, blz?

Cara acho que sua dúvida é em relação a escopo da variável w. Acho que você já viu este parte mas acho que vale a pena recordar, quando você faz:

for ( int w = 1; w <= z; w++ )

A variável w só irá existir dentro do escopo do for, no caso somente existe na linha 17. Quando a próxima execução do for é feita, o java executa a expressão de incremento (w++) que inválida a expressão booleana de execução do for (w <= z). Quando o for termina a variável w deixa de existir, por isso que você não consegue “ver” ela tendo o valor 2. Tente executar o mesmo código assim:

int w =1;
for (; w <= z; w++)
     fact *= w;
mews

Quando eu fiz meus experimentos em java para cálculos matemáticos utilizei recursividade para fazer fatorial.

Segue um exemplo:
public class Matematica
{
	public static long fatorial(long number) {
		if (number == 0) {
			return 1;
		}
		return number * fatorial(number - 1);
	}
 
	public static void main(String[] args) {
		System.out.println(Matematica.fatorial(5));
 
	}  
}
F

RESOLVIDO OBRIGADO!!!

Criado 29 de dezembro de 2010
Ultima resposta 29 de dez. de 2010
Respostas 6
Participantes 5