[RESOLVIDO] Variável s/ valor fora do bloco for

Olá, pessoal!

Prazer em participar do fórum GUJ.

Tenho uma dúvida no código fonte abaixo de um execício da facul:

import javax.swing.*;
class cap08ex02_para
	{ //Início da classe cap08ex02_enquanto.
		public static void main (String noArguments[])
		{ // Início do método void main.
		int i; //Variável para o núm. inteiro a ser calculado seu fatorial.
		int f; //Variável para o o resultado do cálculo do fatorial.
		i = Integer.parseInt (JOptionPane.showInputDialog("Digite aqui um número inteiro para o cálculo do seu fatorial"));
		for (i=i;i>=1;i--)
			{
				f = i*(i-1);
			}
		JOptionPane.showMessageDialog(null,"O fatorial do número digitado é: "+f);
		System.exit(0);
		}
	}

Com esse código gero um resultado do fatorial do número que o usuário digitar na tela de entrada de dados. Mas acusa que a variável f não pôde ser inicializada. Ou seja, o processamento dentro da estrutura for não está deixando a variável f sair do bloco com o valor do resultado.

Agradeço a oportunidade de iniciar minha participação neste fórum.

Obrigado,

Glauco.

Ainda bem que apareceu esse erro. Mesmo se o compilador não reclamasse, o seu código não ia dar o resultado correto.

int n; // Variável para o núm. inteiro a ser calculado seu fatorial.  
int f = 1; // Variável para o o resultado do cálculo do fatorial.  
n = Integer.parseInt (JOptionPane.showInputDialog("Digite aqui um número inteiro para o cálculo do seu fatorial"));  
for (int i = 1; i <= n; ++i) {
    f = f * i;
}
JOptionPane.showMessageDialog(null,"O fatorial do número digitado é: "+f);

Mais uma coisa: não economize variáveis. Você não ganha nada com isso e seu programa também não fica mais rápido com isso. Em particular, não faça as variáveis “mudarem de personalidade” durante o funcionamento de seu programa.

Galuco tudo bom? Bom o que esta acontecendo é o seguinte:

Toda variavel “local” ou toda variavel que vc declara dentro de um método vc e obrigado a inicializa-la antes de usa-la ok?

pra resolver so inicializa ela no seu codigo assim:

[code]import javax.swing.;
class cap08ex02_para
{ //Início da classe cap08ex02_enquanto.
public static void main (String noArguments[])
{ // Início do método void main.
int i; //Variável para o núm. inteiro a ser calculado seu fatorial.
int f = 0; //Variável para o o resultado do cálculo do fatorial.
i = Integer.parseInt (JOptionPane.showInputDialog(“Digite aqui um número inteiro para o cálculo do seu fatorial”));
for (i=i;i>=1;i–)
{
f = i
(i-1);
}
JOptionPane.showMessageDialog(null,"O fatorial do número digitado é: "+f);
System.exit(0);
}
}

[/code]

ps: foi mal nao vi que ja tinham respondido

Olá Glauco, boa tarde,

Também sou iniciante, e estava vendo seu código tentando resolver o problema, ainda não resolvi 100%…rsrsrssrrsrs…mas tenho uma idéia do que pode estar errado, acredito que as variáveis deveriam ser inicializadas com 0, já que o usuário irá inserir o numero para o cálculo, se eu estiver falando besteira me desculpe, mas como disse, também to aprendendo.

Abraço.

import javax.swing.*;
class cap08ex02_para { //Início da classe cap08ex02_enquanto.
   public static void main (String noArguments[]) { // Início do método void main.
      int i; //Variável para o núm. inteiro a ser calculado seu fatorial.
      int f; //Variável para o o resultado do cálculo do fatorial.
         i = Integer.parseInt (JOptionPane.showInputDialog("Digite aqui um número inteiro para o cálculo do seu fatorial"));
            for (i=i;i>=1;i--) {
               f = i*(i-1);
               JOptionPane.showMessageDialog(null,"O fatorial do número digitado é: "+f);
            }
            System.exit(0);
    }
}

Seu código modificado
vê aí se era isso !!
tente melhorar sua identação

Toda variavel declarada dentro de um metodo deve ser inicializada.

Teste o codigo:

 import javax.swing.*;  
 class cap08ex02_para { //Início da classe cap08ex02_enquanto.  
    public static void main (String noArguments[]) { // Início do método void main.  
       int i = Integer.parseInt (JOptionPane.showInputDialog("Digite aqui um número inteiro para o cálculo do seu fatorial"));  //Variável para o núm. inteiro a ser calculado seu fatorial.  
       int f=0; //Variável para o o resultado do cálculo do fatorial.
          
             for (i=i;i>=1;i--) {  
                f = i*(i-1);  
             }
             JOptionPane.showMessageDialog(null,"O fatorial do número digitado é: "+f);    
             System.exit(0);  
     }  
 }  

Pessoal, muito obrigado pela ajuda. Mas ainda não consegui atingir o objetivo. Se inicializo a variável f antes do bloco de processamento do for, ele me traz zero como resultado. Ou seja, processa o fatorial, mas não exibe o valor do fatorial na variável f como saída de resultados.

Se ponho a saída de resultados dentro do processamento do for, me é exibida a cada vez que processa, processando o fatorial fragmentado.

Por exemplo, se quero o fatorial de 5, a lógica é 54=20, 203=60, 602=120, 1201=120. O valor final de f deve ser 120. E esse valor vem como zero se inicio a variável f como zero. E vem fragmentado se uso a saída de resultados antes de terminar o processamento dentro da estrutura de repetição do for.

Entrei numa pegadinha, né… rss

Alguém sabe como resolver?

             for (i=i;i>=1;i--) {  
                f = i*(i-1);  
             }

Quando a variável i chegar à 1, i-1 vai valer 0, e qualquer coisa multiplicada por zero é zero.

:smiley:
Pessoal, desculpa a demora em responder. Mas estou sem internet em casa.
Obrigado a ajuda de todos. Consegui ajustar a lógica e as sintaxes certas.
Vejam abaixo como ficou o código:

import javax.swing.*;
class cap08ex02_para
	{ //Início da classe cap08ex02_para.
		public static void main (String noArguments[])
		{ // Início do método void main.
		int y; //contador da estrutura de repetição
		int n; //Variável para o núm. inteiro a ser calculado seu fatorial.
		int f=1; //Variável para o o resultado do cálculo do fatorial.
		n = Integer.parseInt (JOptionPane.showInputDialog("Digite aqui um número inteiro para o cálculo do seu fatorial"));
		for (y=n;y>1;y--)
			{
				f = f*y;
			}
		JOptionPane.showMessageDialog(null,"O fatorial do número digitado é: " + f);
		System.exit(0);
		}
	}

Abraços,

Glauco