Spielplan

S

Syscon

Gast
Hi,

Also ich möchte einen Spielplan in Java entwickeln.

Jeder soll gegen Jeden Spielen und das in hin und rückrunde

Ich habe meinen ersten Testalgorithmus nach folgender Vorlage Programmiert.

Algorithmus der Woche - Informatikjahr 2006

Um zu Verstehen was der Algorithmus macht wurden auch Beispiele angegeben:

[(1+1) mod 5, (1-1) mod 5] = [2,5] für k=1,
[(1+2) mod 5, (1-2) mod 5] = [3,4] für k=2.

Für k=1 das zweite steht da das (1-1) mod 5 = 5 Ergibt was mir auch logisch erscheint da 0*5+5 = 5 ergibt.

Leider denkt der Windows Taschenrechner anders darüber er meint das 0 mod 5 = 0 ist !!!!!
Genauso auch der Java Compiler und so kriege ich dann natürlich Falsche Ergebnisse raus....denn auf einmal spielt Team 1 gegen Team 0 ... :(

Ich verzweifele noch und danke für jede Hilfe :)

Hier noch mein Testalgorithmus:

Java:
  public void planeSpiele(){
    int n= 4 ;// Anzahl Teams
    
    for(int i=1; i<=(n-1); i++){
    
    System.out.println("Spieltag "+ i);
    System.out.println("-------");
    
    System.out.println(i + "vs." + n);
    
    for (int k=1; k<=((n/2)-1); k++){
    
    int t1 = (i+k) % (n-1);
    int t2 = (i-k) % (n-1);
    System.out.println(t1 + " vs. " + t2); 
    
    
} }
    }
 

XHelp

Top Contributor
was mir auch logisch erscheint da 0*5+5 = 5 ergibt.
Nein, das ist falsch. Die Erklärung steht ja im Satz direkt über der Formel:
Da unsere Knoten aber von 1,...,n-1 durchnummeriert sind (und nicht von 0,1,...,n-2), wird der Rest 0 als n-1 interpretiert.

Läuft also auf
Code:
if (t1==0) {t1=n-1)
hinaus.
Und
Code:
%
ist eigentlich kein Modulo operator. Das ist nur Restdivision. Bei
Code:
-1%5
kommt keine 4 raus. Du könntest es als
Code:
(((i-k)%(n-1))+(n-1))%(n-1)
aufschreiben, damit du allgemein immer das "richtige" bekommst. Falls mich nicht alles täuscht, hat BigInteger das echte Modulo umgesetzt.
 
Zuletzt bearbeitet:
S

syscon

Gast
Dankeschön für die schnelle Antwort dann fang ich mal an das in meine Klassen zu verpacken :)

Hiernochmal der fertige Code falls es noch einer braucht :

Java:
 public void planeSpiele(){
    int n= 4 ;// Anzahl Teams
    
    for(int i=1; i<=(n-1); i++){
    
    System.out.println("Spieltag "+ i);
    System.out.println("-------");
    
    System.out.println(i + "vs." + n);
    
    for (int k=1; k<=((n/2)-1); k++){
    
    int t1 = (((i+k)%(n-1))+(n-1))%(n-1);
    int t2 = (((i-k)%(n-1))+(n-1))%(n-1);
    if(t1==0){t1=(n-1);}
    if(t2==0){t2=(n-1);}
    System.out.println(t1 + " vs. " + t2); 
    
    
} }
    }
 

XHelp

Top Contributor
Das "könnte" war nicht umsonst hervorgehofen. Spätestens nach einer Woche wirst du nicht mehr wissen, was das da für ein abgedrehtes Ding ist. Wenn du es schon beibehalten willst, dann lagere die in eine Methode mit einem sinnvollem Namen aus und kommentiere es entsprechend. In Schritte aufzuteilen könnte auch nicht schaden.
 

syscon

Mitglied
ja du hast recht :) Kommentare könnten da wirklich nicht schaden werde ich morgen bestimmt auch noch mit einbauen.

Aber ich habe jetzt noch ein viel größeres Problem und zwar will ich das ganze jetzt auf Klassen aufteilen.

Es soll eine Klasse Begegnungen geben die eine Begegnungen hält, eine Klasse Spieltag die die Begegnungen eines Spieltages hält und die Klasse Ligasaison die alle Spieltage hält.

Ich will jetzt die System.outs meines Testalgos ersetzten und statdessen die Begegnungen als Objekte erzeugen.Diese sollen dann in eine Klasse Spieltag gespeichert werden das in einem Array alle Begegnungen eines spieltages hält. anschließend sollen die Spieltage in einem Array der Klasse Liga gespeichert werden.

Habe unten im Code nochmal einigermaßen dargestellt wie ich mir das Vorstelle. Weiß aber nicht wie ich das konzeptionell lösen soll.

Mein erstes Problem es gibt 2..n/2 Variable Spieltage
Mein zweites Problem wie Erzeuge ich ein Objekt mit Variablem Inhalt im Bezug auf die Klasse Spieltag

Java:
 public void planeSpiele(){
    int n= liga.gibAnzahl(); ;// Anzahl Teams
    
    for(int i=1; i<=(n-1); i++){
    
    Begegnung hspiel1 = new Begegnung(liga.gibVerein(i),liga.gibVerein(n));}
    
    for (int k=1; k<=((n/2)-1); k++){
    
    int t1 = (((i+k)%(n-1))+(n-1))%(n-1);
    int t2 = (((i-k)%(n-1))+(n-1))%(n-1);
    if(t1==0){t1=(n-1);}
    if(t2==0){t2=(n-1);}
  Begegnung spiel2 = new Begegnung(liga.gibVerein(i),liga.gibVerein(n));}
    
    
} } ligasaison[Spieltag-1]= new Spieltag(Begegnung 1.... Begegnung n/2) 
    }

Ich geh jetzt schlafen morgen ist auch noch ein Tag :) Gute Nacht und danke für die bis jetzt tolle und schnelle Hilfe
 
Zuletzt bearbeitet:

Neue Themen


Oben