public class Reppu extends Esine {
    private Esine[] kamat;
    private int lkm;

    public Reppu(double paino, int arvo, int kapasiteetti) {
	super(paino, arvo);
	kamat = new Esine[kapasiteetti];
	lkm = 0;
    }

    public int kapasiteetti() {
	return kamat.length;
    }

    public void lisääEsine(Esine e) throws ReppuPoikkeus {
	if (lkm == kapasiteetti()) {
	    throw new ReppuPoikkeus("Täyteen reppuun ei voi lisätä");
	} else {
	    for (int i = 0; i < lkm; i++) {
		if (kamat[i] == e) {
		    throw new ReppuPoikkeus("Esine on jo repussa");
		}
	    }	    
	    kamat[lkm] = e;
	    lkm++;
	}
    }

    public void poistaEsine(Esine e) throws ReppuPoikkeus {
	for (int i = 0; i < lkm; i++) {
	    if (kamat[i] == e) {
		kamat[i] = kamat[lkm - 1];
		lkm--;
		return;
	    }
	}
	throw new ReppuPoikkeus("Poistettavaa esinettä ei ollut repussa");
    }

    public String toString() {
	if (lkm == 0) {
	    return "Tyhjä reppu";
	} else {
	    String kamojenKuvaus = null;
	    for (int i = 0; i < lkm; i++) {
		if (i == 0) {
		    kamojenKuvaus = kamat[i].toString();
		} else if (i == lkm - 1) {
		    kamojenKuvaus += " ja " + kamat[i];
		} else {
		    kamojenKuvaus += ", " + kamat[i];
		}
	    }
	    return "Reppu, jonka sisällä on " + kamojenKuvaus;
	}
    }
}
