2017-11-19 2 views
0

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.

Antwort

0

Ich habe die Antwort auf meine Frage gefunden! In dem aktualisierten Abschnitt der Beschreibung durchgeführt ich folgende Ergänzung das zusätzliche & Symbol zu entfernen:

Alte Version:

if (j!=state.size()-1) { 
    System.out.print(" & "); 
} 

Aktualisierte Version:

if ((j!=state.size()-1) && ((j!=state.size()-2) || (i!=state.size()-1))) { 
    fw.write(" & "); 
} 

Das Problem trat immer in den letzten Zeile der Ausgabebedingungen, also der neueste Fix. Die Ausgabe erfolgt nun genau so wie in der Beschreibung beschrieben.

Im weiteren Detail, was das Programm tat, ist die identischen Werte zu entfernen:

s1?s1 & s1?s2 & s1?s3 
s2?s1 & s2?s2 & s2?s3 
s3?s1 & s3?s2 & s3?s3 

So durch Entfernen:

s1?s1 & wir halten s1?s2 & s1?s3

s2?s2 & wir halten s2?s1 & s2?s3

s3?s3 halten wir s3?s1 & s3?s2 &

Als Ergebnis ist das Hinzufügen der neuen Bedingung erforderlich, um die zusätzlichen & in der letzten Zeile zu entfernen.

Verwandte Themen