|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Dec 2006
Messaggi: 15
|
[Java] Programma che gestisce numeri coprimi
Ho un errore di Stack OverFlow nel seguente programma:
public class Coprimi { private int[] insieme; private int cont = 0; public Coprimi () { insieme = new int [100]; } public boolean aggiungi(int n) { if(cont>100) { System.out.println("troppi elementi nell'insieme"); return false; } if (mcd(n)!=1) return false; else { insieme[cont] = n; cont++; return true; } } public int mcd (int n) { int max=1; for (int i=0;i<cont;i++) { if (mcd2(insieme[i],n)>max) { max = mcd2(insieme[i],n); } } return max; } public static int mcd2 (int x,int y) { if(x==0) return y; else if (x < y) return (mcd2(y-x , y)); else return (mcd2(x , x-y)); } } public class TestCoprimi { public static void main (String[] args) { Coprimi numero1 = new Coprimi(); System.out.println(numero1.aggiungi(15)); System.out.println(numero1.aggiungi(14)); System.out.println(numero1.aggiungi(11)); System.out.println(numero1.mcd2(35,11)); } } Il testo dell'esercizio recita così: Definire una classe Coprimi per gestire insiemi di numeri interi tra loro coprimi. Il costruttore inizializza l'insieme come vuoto. La classe ha due metodi aggiungi e mcd. Il metodo aggiungi prende come argomento un intero e se questo è coprimo con tutti i numeri nell'insieme lo aggiunge all'insieme e ritorna true, altrmenti non fa nulla e ritorna false. Il metodo mcd prende come argomento un intero e ritorna il massimo comun divisore tra l'intero e gli interi dell'insieme. Ad esempio se l'insieme è {15, 14, 11} e l'argomento è 35 allora il metodo ritorna 7. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
Rivedi il metodo mcd2, puoi trovare descrizione ed implementazione dell'algoritmo corretto qui: http://it.wikipedia.org/wiki/Algoritmo_di_Euclide
Inoltre in mcd fai inutilmente due chiamate uguali di mcd2, conviene salvare il risultato della prima in una variabile e poi usare quella. PS: usa il tag code per mantenere l'indentazione sul forum |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:07.



















