abstract class Seilfly {
private final String ID;
private final int GLIDETALL;
private final int VINGESPENN;
Seilfly neste = null;
Seilfly forrige = null;
public Seilfly(String id, int g, int v) {
ID = id;
GLIDETALL = g;
VINGESPENN = v;
}
public String hentId() {
return ID;
}
public int hentGlidetall() {
return GLIDETALL;
}
public int hentVingespenn() {
return VINGESPENN;
}
}
public class EkteSeilfly extends Seilfly {
public EkteSeilfly(String id, int g, int v) {
super(id, g, v);
}
}
interface Motordrevet {
int trekkraft();
String motortype();
}
abstract class MotorSeilfly extends Seilfly implements Motordrevet {
private final int TREKKRAFT;
private final String MOTORTYPE;
public MotorSeilfly(String id, int g, int v, int t, String m) {
super(id, g, v);
TREKKRAFT = t;
MOTORTYPE = m;
}
@Override
public int trekkraft() {
return TREKKRAFT;
}
@Override
public String motortype() {
return MOTORTYPE;
}
}
public class TMG extends MotorSeilfly {
public TMG(String id, int g, int v, int t, String m) {
super(id, g, v, t, m);
}
}
public class SLG extends MotorSeilfly {
public SLG(String id, int g, int v, int t, String m) {
super(id, g, v, t, m);
}
}
public class SSG extends MotorSeilfly {
public SSG(String id, int g, int v, int t, String m) {
super(id, g, v, t, m);
}
}
public class Konkurransegruppe implements Iterable<Seilfly> {
private Seilfly f?rste = null;
private Seilfly siste = null;
public Konkurransegruppe() {
}
public void leggTil(Seilfly ny) {
if (f?rste == null) {
f?rste = ny;
siste = ny;
return;
}
siste.neste = ny;
ny.forrige = siste;
siste = ny;
}
public boolean erMed(String ?nsketID) {
Seilfly peker = f?rste;
while (peker != null) {
if (peker.hentID().equals(?nsketID)) {
return true;
}
peker = peker.neste;
}
return false;
}
public Seilfly taUt(String ?nsketID) {
if (!erMed(?nsketID)) {
return null;
}
Seilfly peker = f?rste;
while (!peker.hentID().equals(?nsketID)) {
peker = peker.neste;
}
if (f?rste == siste) {
f?rste = siste = null;
return peker;
}
if (peker == f?rste) {
f?rste = peker.neste;
f?rste.forrige = null;
return peker;
}
if (peker == siste) {
siste = peker.forrige;
siste.neste = null;
return peker
}
peker.forrige.neste = peker.neste;
peker.neste.forrige = peker.forrige;
return peker;
}
private class SeilflyIterator implements Iterator<Seilfly> {
Seilfly peker = f?rste;
@Override
public boolean hasNext() {
return peker != null;
}
@Override
public Seilfly next() {
Seilfly midlertidig = peker;
peker = peker.neste;
return midlertidig;
}
}
@Override
public SeilflyIterator iterator() {
return new SeilflyIterator();
}
public Seilfly[] hentEkteSeilfly() {
int teller = 0;
for (Seilfly s : this) {
if (s instanceof EkteSeilfly) {
teller++;
}
}
Seilfly[] alleEkteSeilfly = new Seilfly[teller];
int i = 0;
for (Seilfly s : this) {
if (s instanceof EkteSeilfly) {
alleEkteSeilfly[i] = s;
i++;
}
}
return alleEkteSeilfly;
}
public int besteGlidetall() {
if (f?rste == null) {
// ANTAR AT METODEN SKAL RETURNERE 0, SIDEN METODEN RETURNERER ET HELTALL, IKKE ET OBJEKT
return 0;
}
int h?yest = f?rste.hentGlidetall();
for (Seilfly s : this) {
if (s.hentGlidetall() > h?yest) {
h?yest = s.hentGlidetall();
}
}
return h?yest;
}
public int st?rstSpennviddeHjelp(Seilfly fly, int h?yest) {
if (fly == null) {
return h?yest;
}
if (fly.hentVingespenn() > h?yest) {
h?yest = fly.hentVingespenn();
}
return st?rstSpennviddeHjelp(fly.neste, h?yest);
}
public int st?rstSpennvidde() {
if (f?rste == null) {
// ANTAR AT METODEN SKAL RETURNERE 0, SIDEN METODEN RETURNERER ET HELTALL, IKKE ET OBJEKT
return 0;
}
return st?rstSpennviddeHjelp(f?rste, f?rste.hentVingespenn());
}
public int[] histogramSpennvidde() {
int[] histogram = new int[99];
for (Seilfly fly : this) {
int spenn = fly.hentVingespenn();
if (spenn >= 10 && spenn <= 99) {
histogram[spenn] = histogram[spenn]++;
}
}
return histogram;
}
}