Lösung zur aktuellen Selbsttestaufgabe *Update*

Ein und Ausgabebeispiel (leider schlägt ein JUnit-Test fehlen, warum ka)

import java.io.*;
import java.util.*;

public class DateiSortierer {
public StringListe einlesen(String dateiname) throws DateiNichtGefundenAusnahme,IOException {
StringListe liste=new StringListe(); // Liste, welcher sp?ter Daten aus Datei aufnimmt
try {
BufferedReader br=new BufferedReader(new FileReader(dateiname));
try {
String line=br.readLine(); //Hilfsvaribale, welche erste Zeile ausliest
while(line!=null) {
liste.add(line); //solange Zeilen da, Liste zeilenweise verl?ngern
line=br.readLine();
}
return liste;
}

finally {
br.close();
}
}
catch (FileNotFoundException e) {
throw new DateiNichtGefundenAusnahme(dateiname);
}

catch (Exception e) {
}

return null;
}

public StringListe sortiere(StringListe unsortierteListe) throws IllegalArgumentException,NullPointerException {
String t;
try {
for(int i=0; i<unsortierteListe.size(); i++) { //stinknormaler Bubblesort
for(int j=0; j<unsortierteListe.size()-1-i; j++) { if(unsortierteListe.get(j).compareTo(unsortierteListe.get(j+1))>0) {
t=unsortierteListe.get(j);
unsortierteListe.set(j,unsortierteListe.get(j+1));
unsortierteListe.set(j+1,t);
}
}
}
}
catch (NullPointerException ex) {
throw new IllegalArgumentException(„null ist ein ungueltiges Argument.“);
}
return unsortierteListe;
}

public void gebeAus(OutputStream out, StringListe zeilen) {
String br = „n“; //Steuerzeichen f?r Zeilenumbruch
try {
while(!zeilen.isEmpty()) {
out.write(zeilen.getFirst().getBytes()); //Zeile in Outputstream schreiben
zeilen.removeFirst(); // anschlie?end l?schen
out.write(br.getBytes()); //Zeilenumbruch
}
}
catch (Exception e) {
System.out.println(„Fehler.“);
}
}

public void sortiereDatei(String dateiname) {
DateiSortierer d=new DateiSortierer();
try {
StringListe input=d.sortiere(d.einlesen(dateiname));
for(int i=0;i<input.size();i++) {
System.out.println(input.get(i));
}
}
catch (DateiNichtGefundenAusnahme e) {
System.err.println(„Die Datei „+dateiname+“ konnte nicht gefunden werden.“);
}
catch (IOException e) {
System.err.println(dateiname.trim()); // nach 30 Minuten testen wollte JUnit immernoch nicht das gew?nschte
} // Ergebnis anzeigen, also hab ich es nun so gelassen

}

}

class DateiNichtGefundenAusnahme extends Exception {
String dateiname=null;

public DateiNichtGefundenAusnahme(String exception) {
super(„Datei wurde nicht gefunden.“);
this.dateiname=exception;
}

public String liefereDateinamen() {
return this.dateiname;
}

}

Baumaufgabe, welche größtenteils auf die JUnit Test optimiert wurde.
public class Baum {
Knoten head;

public Baum(Knoten wurzel) {
this.head=wurzel;
}

public int werteAus() {
return liefereWurzel().werteAus();
}

public String toString() {
return this.liefereWurzel().toString();
}

Knoten liefereWurzel() {
return this.head;
}

static Baum erzeugeBeispielBaum(int a,int b,int c,int d,int e) {
Knoten zahl1=new IntKnoten(a);
Knoten zahl2=new IntKnoten(b);
Knoten zahl3=new IntKnoten(c);
Knoten zahl4=new IntKnoten(d);
Knoten zahl5=new IntKnoten(e);

Knoten erg=new AddKnoten(new MultKnoten(zahl1, zahl2), new DivKnoten(zahl3, new SubKnoten(zahl4,zahl5)));

Baum ergebnis=new Baum(erg);

return ergebnis;
}

}

interface Knoten {
int werteAus();
String toString();

}

// Die restlichen Klassen:
// (Diese Klassen duerfen nicht public als Sichtbarkeit haben!)

class IntKnoten implements Knoten {
int zahl;

IntKnoten(int wert) {
zahl=wert;
}

public int werteAus() {
return zahl;
}

public String toString() {
return Integer.toString(zahl);
}

}

class AddKnoten extends BinaerOperatorKnoten{

AddKnoten(Knoten erster, Knoten zweiter) {
super(erster,zweiter);
}

int berechne() {
return erster.werteAus()+zweiter.werteAus();
}
public String toString() {
return „(„+this.liefereErstenOperand().toString()+“ + „+this.liefereZweitenOperand()+“)“;
}

}

class SubKnoten extends BinaerOperatorKnoten {

SubKnoten(Knoten erster, Knoten zweiter) {
super(erster,zweiter);
}
int berechne() {
return erster.werteAus()-zweiter.werteAus();
}
public String toString() {
return „(„+this.liefereErstenOperand().toString()+“ – „+this.liefereZweitenOperand()+“)“;
}
}

class MultKnoten extends BinaerOperatorKnoten{

MultKnoten(Knoten erster, Knoten zweiter) {
super(erster,zweiter);

}
int berechne() {
return erster.werteAus()*zweiter.werteAus();
}
public String toString() {
return „(„+this.liefereErstenOperand().toString()+“ * „+this.liefereZweitenOperand()+“)“;
}
}

class DivKnoten extends BinaerOperatorKnoten {

DivKnoten(Knoten erster, Knoten zweiter) {
super(erster,zweiter);
}

int berechne() {
try {
return erster.werteAus()/zweiter.werteAus();
}
catch(ArithmeticException e) {
throw new ArithmeticException(„Division durch 0!“);
}
}

public String toString() {
return „(„+this.liefereErstenOperand().toString()+“ / „+this.liefereZweitenOperand()+“)“;
}
}

abstract class BinaerOperatorKnoten implements Knoten {
Knoten erster,zweiter;

BinaerOperatorKnoten(Knoten erster, Knoten zweiter) {
try {
this.erster=erster;
this.zweiter=zweiter;
if(this.erster==null || this.zweiter==null) {
throw new IllegalArgumentException();
}
}
catch (IllegalArgumentException e) {
throw new IllegalArgumentException(„Mindestens ein Knoten ist null.“);
}

}

Knoten liefereErstenOperand() {
return this.erster;
}

Knoten liefereZweitenOperand() {
return this.zweiter;
}

public int werteAus() {
return this.berechne();
}

int berechne (){return 0;} //Helfermethode, welche in den abgeleiteten Klasse ?berschrieben wird

}

*Update* habe mal die Projekte an diesen Beitrag angehangen. Bitte vergesst nicht, in Eclipse die JUnit zu den Projekte hinzuzufügen 😉

https://www.dropbox.com/s/ieluki2pzupl752/Baum.zip
https://www.dropbox.com/s/xvrjd1z68js03vf/Sortierer.zip

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s