Ho un errore di Stack OverFlow nel seguente programma:
codice:
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.