Problema Com Método e Chamada de Método

10 respostas
D

Olá, não conheço muito bem como fazer métodos, estou tentanto fazer um loop onde no meio do loop ele chama uma função(Método) porém não estou conseguindo creio que a sintaxe do método ou variáveis deve estar algo errado segue abaixo o código.

import javax.swing.JOptionPane;
public class DivFatorial {
	public static void main(String args[])
	{
	String 	num,decisao;
	 int	x,n;
	 	double	resultado;
	 	 	
//Método
	public static void fatorial(int n2){
		int res;
		for(int x1=1;x1<=n2;x1++){
			
		res=(res*x1);			
		}
		return res;
	}
// Fim do Método
	
	resultado=1;
	num=JOptionPane.showInputDialog("Digite um número: ");
	n=Integer.parseInt(num);	
		
	if((n>0)&& (n<=10)){
			
				for(x=1;x<=n;x++){
					
				resultado=resultado+(1/fatorial(x));			
				}
				JOptionPane.showMessageDialog(null,"DivFat: "+resultado);				
	}
		else{
		JOptionPane.showMessageDialog(null,"Erro!! O Valor Digitado Tem que ser Maior que 0 e menor que 10");	
	}
	System.exit(0);
	}
	}

10 Respostas

peczenyj

Bom, não se declara um método dentro do outro, pra começo de conversa.

D

isso é uma das coisas q quero fazer… ??
mais então o que faço?
crio uma nova classe com o método?
como chamo esse método?

T
daviddominio:
Olá, não conheço muito bem como fazer métodos, estou tentanto fazer um loop onde no meio do loop ele chama uma função(Método) porém não estou conseguindo creio que a sintaxe do método ou variáveis deve estar algo errado segue abaixo o código.
import javax.swing.JOptionPane;
public class DivFatorial {
	public static void main(String args[])
	{
	String 	num,decisao;
	 int	x,n;
	 	double	resultado;
	 	 	
//Método
	

public static void fatorial(int n2){
		int res;
		for(int x1=1;x1<=n2;x1++){
			
		res=(res*x1);			
		}
		return res;
	}
// Fim do Método
	
	resultado=1;
	num=JOptionPane.showInputDialog("Digite um número: ");
	n=Integer.parseInt(num);	
		
	if((n>0)&& (n<=10)){
			
				for(x=1;x<=n;x++){
					
				resultado=resultado+(1/fatorial(x));			
				}
				JOptionPane.showMessageDialog(null,"DivFat: "+resultado);				
	}
		else{
		JOptionPane.showMessageDialog(null,"Erro!! O Valor Digitado Tem que ser Maior que 0 e menor que 10");	
	}
	System.exit(0);
	}
	}

Amigo,

primeiro um metodo public void

não retorna resultado! coloque no lugar do void o tipo de objeto retornado pelo metodo!

D

acho q naum estão entendendo…
como faço isto??
estou iniciando em java, a parte estruturada até que está tranquilo, agora essa parte de método e objetos não entendo praticamente nada.

helpppp

T
daviddominio:
Olá, não conheço muito bem como fazer métodos, estou tentanto fazer um loop onde no meio do loop ele chama uma função(Método) porém não estou conseguindo creio que a sintaxe do método ou variáveis deve estar algo errado segue abaixo o código.
import javax.swing.JOptionPane;
public class DivFatorial {
    
    //Método
  public static int fatorial(int n2){
        int res;
        for(int x1=1;x1<=n2;x1++){
            
            res=(res*x1);
        }
        return res;
    }
    // Fim do Método
    
    public static void main(String args[]) {
        String 	num,decisao;
        int	x,n;
        double	resultado;
        
        resultado=1;
        num=JOptionPane.showInputDialog("Digite um número: ");
        n=Integer.parseInt(num);
        
        if((n>0)&& (n<=10)){
            
            for(x=1;x<=n;x++){
                
                resultado=resultado+(1/fatorial(x));
            }
            JOptionPane.showMessageDialog(null,"DivFat: "+resultado);
        } else{
            JOptionPane.showMessageDialog(null,"Erro!! O Valor Digitado Tem que ser Maior que 0 e menor que 10");
        }
        System.exit(0);
    }
}

Pronto, agora funciona! heuheuehue

T

Que outra linguagem de computador você conhece?
Se você disser, é mais fácil comparar (por exemplo, se você sabe português, é mais fácil aprender espanhol, porque só explicamos as diferenças, como “novia” = “namorada” ou “noiva” (dependendo do contexto), ou “embarazada” = “grávida”.

peczenyj

Se vc está aprendendo Java, acho que vc deveria 'dar um tempo' na interação com o usuario via swing e focar no codigo básico.

Por exemplo, vc tem que calcular o fatorial de um número inteiro. Veja o seu código

public static int fatorial(int n2){   
        int res;   
        for(int x1=1;x1<=n2;x1++){   
               
            res=(res*x1);   
        }   
        return res;   
    }

IMHO no seu método main vc deveria ter algo como

public static void main(String [] args){
           System.out.println("O fatorial de 10 eh " + fatorial(10));
}

Compile e rode. Funcionou ? Se sim, altere o valor, calcule o fatoria de 1, 2, 5, 25, etc.

Quando tiver isso 100% dentro da cuca, vc coloca um 'javax.swing.JOptionPane' ;-)

Andre_Brito

Parceiro, acho que o método do fatorial deveria estar fora do main (que é o principal). Eu não entendi o porquê do 'static', mas estou começando também.

Então você pega e faz primeiro a função do fatorial:

//Método
	public int fatorial(int n2){
		int res;
		for(int x1 = 1; x1 <= n2; x1++){
			
		res=(res*x1);			
		}
		return res;
	}
// Fim do Método

Certo?

Agora, você precisa rodar esse método com a função main:

public static void main(String args[])
	{
	String num,decisao;
	int x,n;
	double resultado = 1;

	num = JOptionPane.showInputDialog("Digite um número: ");
	n = Integer.parseInt(num);	
		
	if((n>0) && (n<=10)){
		for(x = 1; x <= n; x++){
			resultado=resultado+(1/fatorial(x));
			// Acho que poderia ser também assim:
			// resultado += (1/fatorial(x));		
		}
			JOptionPane.showMessageDialog(null,"DivFat: "+resultado);				
	}
	else{
		JOptionPane.showMessageDialog(null,"Erro!! O Valor Digitado Tem que ser Maior que 0 e menor que 10");	
	}
	// Não entendi porque você colocou isso, mas tudo bem.
	System.exit(0);
	}
	}
Se você puder ver, o código ficou um pouco melhor organizado e mais fácil de ler com os espaços que foram dados.
import javax.swing.JOptionPane;
public class DivFatorial {

	//Método
	public int fatorial(int n2){
		int res;
		for(int x1=1;x1<=n2;x1++){
			
		res=(res*x1);			
		}
		return res;
	}
	// Fim do Método
	

	public static void main(String args[])
	{
	String num,decisao;
	int x,n;
	double resultado = 1;

	num = JOptionPane.showInputDialog("Digite um número: ");
	n = Integer.parseInt(num);	
		
	if((n>0) && (n<=10)){
		for(x = 1; x <= n; x++){
			resultado=resultado+(1/fatorial(x));
			// Acho que poderia ser também assim:
			// resultado += (1/fatorial(x));		
		}
			JOptionPane.showMessageDialog(null,"DivFat: "+resultado);				
	}
	else{
		JOptionPane.showMessageDialog(null,"Erro!! O Valor Digitado Tem que ser Maior que 0 e menor que 10");	
	}
	// Não entendi porque você colocou isso, mas tudo bem.
	System.exit(0);
	}
	}

Como o código todo ficaria.

Existem algumas práticas que facilitam a sua vida quando for dar manutenção em um programa ou quando outra pessoa for lever o programa que você fez, como os comentários nos métodos. Você usou '//'. Não está errado... mas existe um artifício do Java chamado Javadoc, que gera um 'documento' sozinho.
/**
	 * Método que vai fazer tal coisa.
	 * @param número que vai ser passado por parâmetro
                 */
	public int fatorial(int n2){
		int res;
		for(int x1=1;x1<=n2;x1++){
			
		res=(res*x1);			
		}
		return res;
	}

Saca? É só uma dica pra você, pra quando os outros lerem seu código, eles tenham uma maior facilidade. É um padrão que muitos programadores Java seguem.

Abraço.

T

para se ter acesso ao metodo sem termos que instanciar um objeto da classe… os metodos devem ser estaticos…

ou seja se voce fosse utilizar o metodo da seguinte maneira

public int fatorial(int n2)

no main teria que ser assim

DivFatorial objetoInstanciado = new DivFatorial();

objetoInstanciado.fatorial(10);

Acho que dava pra explicar melhor, mas o exemplo mata a dúvida heuheuheueh!

D

Obrigado a todos que ajudaram…
Ficou muito bom o programinha…
vou postar ele aqui só pra vc’s visualizarem…

import javax.swing.JOptionPane;
public class Div2Fatorial {
	
//Método estático   
	public static double fatorial(int n2){     
        int re = 1;     
        for(int x1=1;x1<=n2;x1++){     
                 
            re*=x1;     
        }     
        return re;     
    }  
// Fim do método
	
	public static void main(String args[])
	{
	String 	num;
	int	x,n;
	double	resultado;
	 	 	
	resultado=0;
	num=JOptionPane.showInputDialog("Digite um número: ");
	n=Integer.parseInt(num);	
	if((n>1)&& (n<5)){
			
				for(x=1;x<=n;x++){
				resultado+=(1/fatorial(x));
				}
				
				JOptionPane.showMessageDialog(null,"DivFat: "+resultado);				
	}
		else{
		JOptionPane.showMessageDialog(null,"Erro!! O Valor Digitado Tem que ser Maior que 1 e menor 5");	
	}
	}
	}
Criado 25 de outubro de 2007
Ultima resposta 25 de out. de 2007
Respostas 10
Participantes 5