# Spielplan



## Syscon (16. Jun 2011)

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: 


```
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 (17. Jun 2011)

> 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 
	
	
	
	





```
if (t1==0) {t1=n-1)
```
 hinaus.
Und 
	
	
	
	





```
%
```
 ist eigentlich kein Modulo operator. Das ist nur Restdivision. Bei 
	
	
	
	





```
-1%5
```
 kommt keine 4 raus. Du *könntest* es als 
	
	
	
	





```
(((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.


----------



## syscon (17. Jun 2011)

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 :


```
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 (17. Jun 2011)

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 (17. Jun 2011)

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


```
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


----------

