Als Teil eines Programms, das eine Textausgabedatei generiert, muss ich eine vordefinierte Nummer einfügen n (die der Anzahl der erforderlichen Elemente entspricht) und automatisch Bedingungen erstellen darunter.Drucken einer Reihe von Bedingungen zwischen einer bestimmten Anzahl von Elementen
z. für n = 3 werden die Elemente s1, s2 und s3 erzeugt. Was ich erreichen möchte ist, die folgenden Bedingungen automatisch und drucken Sie sie in eine Textdatei generieren:
s1<s2 & s1<s3
s2<=s1 & s2<s3
s3<=s1 & s3<=s2
Die obigen Bedingungen alle möglichen Kombinationen zwischen den Elementen abzudecken. Was ich bisher habe, ist ein ArrayList
, die so viele Elemente wie die vorgegebene Anzahl n und der folgenden Code zu erzeugen, um die erforderlichen Ergebnisse gilt:
int counter = 0;
ArrayList<String> state = new ArrayList<String>();
for (int i=0; i<=n; i++) {
state.add(i,"s"+1));
}
for (int j=1; j<=n; j++) {
for (int i=0; i<(n-1); i++) {
if (i==(n-2)) {
fw.write(state.get(i)+"<"+state.get(counter));
}
else {
fw.write(state.get(i)+"<"+state.get(counter)+" & ");
}
}
counter++;
}
Ich weiß, dass die counter
in diesem Fall unter Verwendung von nicht korrekt ist, aber ich kann mir keine Möglichkeit vorstellen, die verschiedenen Bedingungen korrekt darzustellen.
UPDATE:
Verwendung des folgenden Codes zu Testzwecken konnte ich nahe an das gewünschte Ergebnis erhalten:
ArrayList<String> collectStates = new ArrayList<String>();
String activeState,writtenState;
for (int i=0; i<n; i++) {
for (int j=0; j<state.size(); j++) {
if (state.get(i) != state.get(j)) {
activeState=state.get(i)+"<"+state.get(j);
writtenState=state.get(j)+"<"+state.get(i);
if (collectStates.contains(activeState)) {
System.out.print(state.get(i)+"<="+state.get(j));
}
else {
System.out.print(activeState);
}
if (j!=state.size()-1) {
System.out.print(" & ");
}
collectStates.add(writtenState);
}
}
System.out.print("\n");
}
Der Ausgang I erhalten ist:
s1<s2 & s1<s3
s2<=s1 & s2<s3
s3<=s1 & s3<=s2 &
Die Einziges Problem ist die extra &
am Ende der letzten Zeile, die ich noch nicht kenne wie zu beheben.