Hallo, ich habe ein Problem bei der Bearbeitung einer Aufgabe.
Ziel des Programms soll es sein, eine Quilt-Decke aus s verschiedenen Stoffmustern zu nähen, wobei von jedem Stoffmuster s insgesamt q gleiche Flicken vorhanden sind.
Das Quilt soll am Ende h*b (h*b < s*q) groß sein (es können also Flicken überig bleiben).
Bedingungen, die also eingehalten werden müssen sind, dass pro Muster s nicht mehr als die vorhandene Flicken q verwendet werden. Außerdem sollen nebeneinander und diagonal keine gleichen Muster eingenäht werden.
Jedes Muster per Zufall ausgewählt werden.
Meine Überlegung ist folgende:
Die Muster entsprechen jeweils einer Zahl.
Soweit ist meine Überlegung, damit nur die vorgegebene Anzahl an Flicken genutzt wird.
Ich müsste jetzt aber ja irgendwie den "else"-Teil so oft wiederholen und jeweils auf die Bedingung testen, bis ich alle Felder im Quilt gefüllt habe. Da steh ich jetzt aber irgendwie auf dem Schlauch. Ich dachte mir, dass ich alles in die HashMap einspeichere, damit ich auf die Werte dann beim Überprüfen der Bedingung "keine gleichen Flicken nebeneinander oder diagonal" auf die gespeicherten Werte zurückgreifen kann...
Wäre echt nett, wenn mir jemand ein bisschen zur Hand gehen könnte.
Mit freundlichen Grüßen
Ziel des Programms soll es sein, eine Quilt-Decke aus s verschiedenen Stoffmustern zu nähen, wobei von jedem Stoffmuster s insgesamt q gleiche Flicken vorhanden sind.
Das Quilt soll am Ende h*b (h*b < s*q) groß sein (es können also Flicken überig bleiben).
Bedingungen, die also eingehalten werden müssen sind, dass pro Muster s nicht mehr als die vorhandene Flicken q verwendet werden. Außerdem sollen nebeneinander und diagonal keine gleichen Muster eingenäht werden.
Jedes Muster per Zufall ausgewählt werden.
Meine Überlegung ist folgende:
Die Muster entsprechen jeweils einer Zahl.
Java:
import java.util.HashMap;
import gdi.quilt.QuiltPainter;
public class Quilt extends QuiltPainter {
public Quilt(int h, int b, int s, int q, String[] args) {
super(h, b, s, q, args);
}
int rows = getHeight();
int columns = getWidth();
int[] patterns = new int[getNumberOfPatterns()];
private void savePatterns() {
for (int i = 0; i < patterns.length; i++) {
patterns[i] = i;
}
}
public void tailorQuilt(int[][] quilt) {
savePatterns();
HashMap<Integer, Integer> patternCount = new HashMap<>();
int counter = 0;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
int randomPattern = patterns[(int) (Math.random() * getNumberOfPatterns())];
patternCount.put(randomPattern, counter + 1);
if (patternCount.get(randomPattern) <= getNumberOfPatchesPerPattern()) {
quilt[i][j] = randomPattern;
} else {
(patternCount.get(randomPattern) > getNumberOfPatchesP)
randomPattern = patterns[(int) (Math.random() * getNumberOfPatterns())];
}
}
}
}
Soweit ist meine Überlegung, damit nur die vorgegebene Anzahl an Flicken genutzt wird.
Ich müsste jetzt aber ja irgendwie den "else"-Teil so oft wiederholen und jeweils auf die Bedingung testen, bis ich alle Felder im Quilt gefüllt habe. Da steh ich jetzt aber irgendwie auf dem Schlauch. Ich dachte mir, dass ich alles in die HashMap einspeichere, damit ich auf die Werte dann beim Überprüfen der Bedingung "keine gleichen Flicken nebeneinander oder diagonal" auf die gespeicherten Werte zurückgreifen kann...
Wäre echt nett, wenn mir jemand ein bisschen zur Hand gehen könnte.
Mit freundlichen Grüßen