rendered paste body private void fetterKusine() { String s1 = utsyn.hentStreng("Angi navn pa person 1"); String s2 = utsyn.hentStreng("Angi navn pa person 2"); // gi feil hvis en av dem ikke eksisterer if(!tre.inneholder(s1)) giFeil(s1 + " eksisterer ikke"); else if(!tre.inneholder(s2)) giFeil(s2 + " eksisterer ikke"); else { Person p1 = tre.hentPerson(s1); Person p2 = tre.hentPerson(s2); // list person 1 og 2, gjenta rekursivt for foreldre ArrayList<Person> p1bf = new ArrayList<Person>(); ArrayList<Person> p2bf = new ArrayList<Person>(); p1bf.add(p1); p2bf.add(p2); boolean harFellesBF = false; boolean harFellesUnderBF = false; for(int level = 0; level < 2; level++) { // sjekk om det finnes relasjoner nermere enn besteforeldre for(Person p1test : p1bf) { for(Person p2test : p2bf) harFellesUnderBF |= (p1test == p2test); } // finn foreldre p1bf = listForeldre(p1bf); p2bf = listForeldre(p2bf); } // si fra hvis de har nermere relasjoner if(harFellesUnderBF) utsyn.si(p1 + " og " + p2 + " er nermere beslektet"); else { // test om de har felles besteforeldre for(Person p1test : p1bf) { for(Person p2test : p2bf) harFellesBF |= (p1test == p2test); } utsyn.si(p1 + " og " + p2 + " er " + (harFellesBF ? "" : "ikke ") + (p1 instanceof Kvinne && p2 instanceof Kvinne ? "kusiner" : (p1 instanceof Mann && p2 instanceof Mann ? "fettere" : "fetter og kusine"))); } } } private ArrayList<Person> listForeldre(ArrayList<Person> alb) { ArrayList<Person> alf = new ArrayList<Person>(); for(Person p : alb) { if(p.hentMor() != null) alf.add(p.hentMor()); if(p.hentFar() != null) alf.add(p.hentFar()); } return alf; }