Função pra MMC: "cannot find symbol method MMC (int int int int)"

10 respostas
F

Por que o erro?

import java.util.*;

class MMC{
	public static void main(String args[]){
	 Scanner s= new Scanner(System.in);
	 
	int a, b, c, d;
	 
	 System.out.println("Digite o valor de A");
	   a= s.nextInt();
	   System.out.println("Digite o valor de B");
	   b=s.nextInt();
	   System.out.println("Digite o valor de C");
	   c=s.nextInt();
	   System.out.println("Digite o valor de D");
	   d= s.nextInt();  
	   
	   System.out.println("o MMC é: "+mmc(a,b,c,d));

}	 	
	

static int mmc(int a, int b, int c, int d){
	
int R;

if(( a/d == 1) && (b/d == 1) && (c/d == 1)){
	R= 1;
	
	}else{
		
if ((a%d == 0) || (b%d == 0) || (c%d==0)){
	
  if(a%d==0){
  	
  	a= a/d;  	
  }
  
  
  if(b%d==0){
  	
  	b= b/d;
  }	
	
	
  if(c%d==0){
  	
  	c=c%d;
  }	
	
	R= d* MMC(a,b,c,d);
			
	}else{
		
		R= MMC(a,b,c,d+1);
		
	}
	
	
	}	
	
	return R;
	
	
	
	
	
}

}

10 Respostas

Roger75
Felipe Kan:
Por que o erro?
import java.util.*;

class MMC{
	public static void main(String args[]){
	 Scanner s= new Scanner(System.in);
	 
	int a, b, c, d;
	 
	 System.out.println("Digite o valor de A");
	   a= s.nextInt();
	   System.out.println("Digite o valor de B");
	   b=s.nextInt();
	   System.out.println("Digite o valor de C");
	   c=s.nextInt();
	   System.out.println("Digite o valor de D");
	   d= s.nextInt();  
	   
	   System.out.println("o MMC é: "+mmc(a,b,c,d));

}	 	
	

static int mmc(int a, int b, int c, int d){
	
int R;

if(( a/d == 1) && (b/d == 1) && (c/d == 1)){
	R= 1;
	
	}else{
		
if ((a%d == 0) || (b%d == 0) || (c%d==0)){
	
  if(a%d==0){
  	
  	a= a/d;  	
  }
  
  
  if(b%d==0){
  	
  	b= b/d;
  }	
	
	
  if(c%d==0){
  	
  	c=c%d;
  }	
	
	R= d* MMC(a,b,c,d);
			
	}else{
		
		R= MMC(a,b,c,d+1);
		
	}
	
	
	}	
	
	return R;
	
	
	
	
	
}

}

O nome do método está em minúsculo e você está chamando com maiúsculas.

R= d* MMC(a,b,c,d);
F

Obrigado, era só isso mesmo. Mas agora ele está retornando mensagens estranhas. Com alguns n°s retorna 1 e com outros, dá erro:
at MMC.MMC<MMC.java:51>

maquiavelbona

Que erro?
E no seu código também não estás validando divisão por zero.

Até!

F

Esse erro:
at MMC.funcaommc<MMC.java:50>

http://img396.imageshack.us/img396/7264/javaom1.jpg

F

Alguém sabe :?:

Sami_Koivu

Olá,

Aparentemente devido a algum erro de lógica, seu método funcaommc fica chamando si mesmo numa recursão infinita até que estoura a pilha causando um StackOverflowException.

at MMC.funcaommc<MMC.java:50>

Não é um exatamente erro, ele faz parte do stack trace.

[]s,
Sami

F

Certo, e como eu faço? Não estou conseguindo achar outro jeito de resolver.

maquiavelbona

Não sei se estás percebendo, mas o que o Sami Koivu disse procede. Analise seu código e veja que sua funcao mmc(…) está sendo executada dentro dela mesma.
Jeito de resolver? Reveja sua lógica.

Até!

T

Amigo, que tal fazer um MMC de apenas 2 números? É mais fácil fazer, e foi assim que aprendi quando tinha 9 anos de idade (o algoritmo, não o programa - naquele tempo eu não tinha computador). De qualquer maneira:

mmc (a, b, c, d) = mmc (mmc (mmc (a, b), c), d)

mmc (a, b) = a * b / mdc (a, b)

T
import java.util.*;

// ATENÇÃO PROFESSORES - NÃO ACEITEM ESTE CÓDIGO
// DESSE JEITO; O ALUNO DEVE ALTERÁ-LO E PROVAR QUE O
// ENTENDEU CORRETAMENTE 
 
 
class MMC{
    public static void main(String args[]){
        Scanner s= new Scanner(System.in);

        int a, b, c, d;

        System.out.println("Digite o valor de A");
        a= s.nextInt();
        System.out.println("Digite o valor de B");
        b=s.nextInt();
        System.out.println("Digite o valor de C");
        c=s.nextInt();
        System.out.println("Digite o valor de D");
        d= s.nextInt();  

        System.out.println("o MMC é: "+mmc(a,b,c,d));

    }	 	

    /**
    * Calcula o maior divisor comum de dois números.
    * @param a O primeiro número
    * @param b O segundo número
    * @return mdc(a,b)
    */
    public static int mdc (int a, int b) {
        if (b == 0) return a;
        else return mdc (b, a % b);
    }
    
    /**
    * Calcula o menor múltiplo comum de dois números.
    * @param a O primeiro número 
    * @param b O segundo número
    * @return mmc(a,b)
    */
    public static int mmc (int a, int b) {
        return a * b / mdc (a, b);
    }
    
    
    /**
    * Este é o seu programa :P
    */
    static int mmc(int a, int b, int c, int d){
        return mmc (mmc (mmc (a, b), c), d);
    }

}
Criado 25 de maio de 2007
Ultima resposta 28 de mai. de 2007
Respostas 10
Participantes 5