Implementieren Sie eine eigene Klasse zum Arbeiten mit gekürzten Brüchen. Diese Klasse soll Operationen zum Addieren, Subtrahieren, Multiplizieren und Dividieren unterstützen. Außerdem dürfen natürlich auch eine toString()-Methode, sowie eine value()-Methode, die den Wert als double liefert, nicht fehlen.
Beachten Sie bei Ihrer Entwicklung das Prinzip der Kapselung. Mit ,,Fehlern`` brauchen Sie sich (momentan) nicht herumzuschlagen. :-)
Sie kennen doch sicher das 8-Damen-Problem: Dabei soll man 8 Damen auf einem Schachbrett so positionieren, dass sich keine zwei Damen bedrohen.
Folgende Klasse Main
löst das Problem für ein
Brett der Größe 4 (Parameter size
von check()).
import java.util.Vector; public class Main { public static Figur erzeugeFigur(int x, int y) { return new Dame(x, y); } // versuche anzahl Figuren auf einem size x size Brett zu platzieren // (Figuren vom Typ, wie sie erzeugeFigur() anlegt) public static boolean positioniere(int size, int anzahl, Vector figuren) { if (anzahl == 0) return true; else { // probiere alle Brettpositionen durch for (int x = 1; x <= size; x++) for_y: for (int y = 1; y <= size; y++) { Figur f = erzeugeFigur(x, y); // teste, ob f mit allen vorher gesetzten Figuren // kombiniert werden kann for (int i = 0; i < figuren.size(); i++) { Figur f1 = (Figur) figuren.get(i); // f1 und f können nicht kombiniert werden, // falls beide auf der selben Position sind, // oder eine die andere schlagen würde if (f1.illegal(f)) continue for_y; // nächster Durchlauf von for y=... } // Figur aufnehmen in die Liste der gesetzten Figuren figuren.add(f); // ... und nun rekursiv die restlichen anzahl-1 // Figuren auf dem Brett positionieren if (positioniere(size, anzahl-1, figuren)) { // lief alles gut, dann Figur ausgeben und Erfolg // melden System.out.println(""+f); return true; } // andernfalls Figur wieder entfernen und mit // nächster Möglichkeit weiter probieren figuren.remove(figuren.size()-1); } return false; // keine Lösung mit Ausgangssituation (figuren) } } public static void main(String[] args) { if (!positioniere(4, 4, new Vector())) System.out.println("Nicht möglich!"); } }Wenn es die geeigneten Klassen Figur und Dame gibt, dann macht die main-Methode von Main folgende Ausgabe:
thales$ java Main Dame(4,3) Dame(3,1) Dame(2,4) Dame(1,2) thales$
Hinweis: Die Klasse Figur sollte die Position speichern (und diese beim Konstruktor entgegen nehmen). Außerdem sollte Sie Methoden toString(), schlaegt() und illegal() haben - schlaegt() kann man verwenden, um illegal() zu implementieren.
Die Klasse Dame muss dann nur mit der Position den Oberklassen-Konstruktor aufrufen und die Methoden schlaegt() und toString() sinnvoll überschreiben.
Den Betrag einer int
kann man mit der Funktion Math.abs(.)
berechnen.
Viel Erfolg!