Função pra MMC: "cannot find symbol method MMC (int int int int)"
10 respostas
F
Felipe_Kan
Por que o erro?
importjava.util.*;classMMC{publicstaticvoidmain(Stringargs[]){Scanners=newScanner(System.in);inta,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));}staticintmmc(inta,intb,intc,intd){intR;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);}}returnR;}}
importjava.util.*;classMMC{publicstaticvoidmain(Stringargs[]){Scanners=newScanner(System.in);inta,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));}staticintmmc(inta,intb,intc,intd){intR;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);}}returnR;}}
O nome do método está em minúsculo e você está chamando com maiúsculas.
R= d* MMC(a,b,c,d);
F
Felipe_Kan
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.
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
Felipe_Kan
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
thingol
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
thingol
importjava.util.*;// ATENÇÃO PROFESSORES - NÃO ACEITEM ESTE CÓDIGO// DESSE JEITO; O ALUNO DEVE ALTERÁ-LO E PROVAR QUE O// ENTENDEU CORRETAMENTE classMMC{publicstaticvoidmain(Stringargs[]){Scanners=newScanner(System.in);inta,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) */publicstaticintmdc(inta,intb){if(b==0)returna;elsereturnmdc(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) */publicstaticintmmc(inta,intb){returna*b/mdc(a,b);}/** * Este é o seu programa :P */staticintmmc(inta,intb,intc,intd){returnmmc(mmc(mmc(a,b),c),d);}}