# java



## kimi (22. Dezember 2009)

Hi. ich muss ein programm für ein baskettball sportliga schreiben. die paarungen, spieltag und spielplan erstellen genauso wie diese Internetseite. 
http://www.basketball-tabelle.de/basketball/bundesliga-herren/basketball-tabelle.php

Ich hab ein code für fußball aber ich weiß nicht wie ich das für baskettball schreiben soll. ich komme mit der poisson-verteilung und solche sachen nicht klar. 
könnt ihr mir vielleicht helfen? danke 

```
public class Spielplan
{
	private java.util.ArrayList<Spieltag> spielplan = new java.util.ArrayList<Spieltag>();
	private Tabelle tabelle;
	private Stochastik stochastik = new Stochastik();
	
	public Spielplan(Tabelle tabelle)
	{
		this.tabelle = tabelle;
	}

	public java.util.ArrayList<Spieltag> getSpielplan()
	{
		return spielplan;
	}

	public void setSpielplan(java.util.ArrayList<Spieltag> spielplan)
	{
		this.spielplan = spielplan;
	}
	
	

	
	
	/**
	 * Gibt den Spielplan, unabhängig davon ob er bereits simuliert 
	 * wurde oder nicht, aus. Wenn er bereits simuliert wurde werden
	 * zusätzlich die erzielten Tore ausgegeben.
	 */
	public void spielplanAusgeben()
	{
		Spieltag spieltag = null;
		int zaehlvariable1 = 0;
		
		while (zaehlvariable1 < (tabelle.getMannschaftsliste().size() - 1) * 2)
		{

			spieltag = spielplan.get(zaehlvariable1);
			java.lang.System.out.print("\n::::::::: Heimmannschaft    Spieltag " + (zaehlvariable1 + 1) + "    Gastmannschaft ::::::\n");
			spieltagAusgeben(spieltag);			
			zaehlvariable1++;
		}
	}
	
	
	
	/**
	 * Gibt die Ergebnisse einzelner Spieltage aus und wird von spielplanAusgeben verwendet
	 */
	public void spieltagAusgeben(Spieltag spieltag)
	{
		int zaehlvariable = 0;
		while (zaehlvariable < (tabelle.getMannschaftsliste().size() / 2))
		{

			MeinSpiel spiel = spieltag.getSpiele().get(zaehlvariable);
			java.lang.System.out
					.print("Spiel "
							+ (zaehlvariable + 1)
							+ " - "
							+ (Stringverarbeitung.stringMitNachgestelltenLeerzeichenAufLaengeZuschneiden(spiel.getMannschaftA().getName(), 22) + " - " + Stringverarbeitung
									.stringMitVorangestelltenLeerzeichenAufLaengeZuschneiden(spiel.getMannschaftB().getName(), 22)));

			if (spiel.getToreMannschaftA() != null)
			{
				java.lang.System.out.print("  " + spiel.getToreMannschaftA() + " - " + spiel.getToreMannschaftB());
			}

			java.lang.System.out.print("\n");
			zaehlvariable++;

		}
	}
	
	/**
	 * @param spieltagnummer Erwartet den Spieltag, dessen
	 * Ergebnisse zu analysieren und einzutragen sind.
	 * 
	 * Diese Methode berechnet Tabellendaten wie Tore, Gegentore, Niederlagen,
	 * Siege, Unentschieden, Anzahl Spiele von allen beteiligten Mannschaften
	 * und speichert sie ab.
	 * Wenn bereits Ergebnisse eingetragen sind werden diese restlos gelöscht und
	 * dann neu berechnet.
	 */
	public void ergebnisseEinesSpieltagsEintragen(int spieltagnummer)
	{
		if (spielplan.get(spieltagnummer - 1).getSpiele().get(0).getToreMannschaftA() != null)
		{
			
			
			for (MeinSpiel spiel : spielplan.get(spieltagnummer - 1).getSpiele())
			{

				MeineMannschaft mannschaftA = spiel.getMannschaftA();
				MeineMannschaft mannschaftB = spiel.getMannschaftB();

				if (spieltagnummer == 1)
				{
					mannschaftA.tabellenberechnungZuruecksetzen();
					mannschaftB.tabellenberechnungZuruecksetzen();
				}

				mannschaftA.setTore(0 + mannschaftA.getTore() + spiel.getToreMannschaftA());
				mannschaftB.setTore(mannschaftB.getTore() + spiel.getToreMannschaftB());

				mannschaftA.setGegentore(mannschaftA.getGegentore() + spiel.getToreMannschaftB());
				mannschaftB.setGegentore(mannschaftB.getGegentore() + spiel.getToreMannschaftA());

				mannschaftA.setAnzahlAbsolvierterSpiele(mannschaftA.getAnzahlAbsolvierterSpiele() + 1);
				mannschaftB.setAnzahlAbsolvierterSpiele(mannschaftB.getAnzahlAbsolvierterSpiele() + 1);

				if (spiel.getToreMannschaftA() > spiel.getToreMannschaftB())
				{
					mannschaftA.setAnzahlSiege(mannschaftA.getAnzahlSiege() + 1);
					mannschaftB.setAnzahlNiederlagen(mannschaftB.getAnzahlNiederlagen() + 1);
					mannschaftA.setTabellenpunkte(mannschaftA.getTabellenpunkte() + 3);
				}
				else if (spiel.getToreMannschaftA() < spiel.getToreMannschaftB())
				{
					mannschaftB.setAnzahlSiege(mannschaftB.getAnzahlSiege() + 1);
					mannschaftA.setAnzahlNiederlagen(mannschaftA.getAnzahlNiederlagen() + 1);
					mannschaftB.setTabellenpunkte(mannschaftB.getTabellenpunkte() + 3);
				}
				else
				{
					mannschaftA.setAnzahlRemis(mannschaftA.getAnzahlRemis() + 1);
					mannschaftB.setAnzahlRemis(mannschaftB.getAnzahlRemis() + 1);
					mannschaftA.setTabellenpunkte(mannschaftA.getTabellenpunkte() + 1);
					mannschaftB.setTabellenpunkte(mannschaftB.getTabellenpunkte() + 1);
				}

			}
		}
	}


	
	
	
	/**
	 * Ruft die Methode ergebnisseEinesSpieltagsEintragen
	 * für alle Spieltage auf.
	 */
	public void ergebnisseMehrererSpieltageEintragen()
	{
		int zaehlvariable = 1;
		while (zaehlvariable <= (tabelle.getMannschaftsliste().size()-1) * 2)
		{
			ergebnisseEinesSpieltagsEintragen(zaehlvariable);
			zaehlvariable = zaehlvariable + 1;
		}
	}
	
	
	
	
	/**
	 * @param spieltagnr Erwartet die Nummer des zu planenden Spieltages
	 * @param rueckrunde Erwartet einen boolean Wert der "true" ist falls
	 * der übermittelte Spieltag in der Rückrunde liegt
	 * 
	 * @return	Gibt eine Objekt von Spieltag zurück
	 * in dem alle Spiele die an dem Tag stattfinden 
	 * sowie die Spieltagnummer gespeichert sind.
	 * 
	 * Plant genau einen Spieltag unter Verwendung des hier
	 * beschriebenen Algorhythmus:
	 * http://de.wikipedia.org/wiki/Spielplan_%28Sport%29
	 * 
	 */
	public Spieltag spieltagPlanen(int spieltagnr, boolean rueckrunde)
	{
		MeinSpiel spiel = null;
		final int MANNSCHAFTSANZAHL = tabelle.getMannschaftsliste().size();

		Spieltag spieltag = null;
		java.util.ArrayList<MeinSpiel> spiele = new java.util.ArrayList<MeinSpiel>();
		java.util.ArrayList<MeineMannschaft> vergebeneMannschaften = new java.util.ArrayList<MeineMannschaft>();
		int vergebeneSpiele = 0;
		int mannschaftA = 1;
		int mannschaftB = 1;

		while (vergebeneSpiele < MANNSCHAFTSANZAHL / 2)
		{

			while (mannschaftA <= MANNSCHAFTSANZAHL - 1)
			{

				while (mannschaftB <= MANNSCHAFTSANZAHL - 1)
				{
					if (((mannschaftA + mannschaftB) % (MANNSCHAFTSANZAHL - 1) == spieltagnr) && (mannschaftA != mannschaftB))
					{
						MeineMannschaft mannschaftAObjekt = tabelle.getMannschaftsliste().get(mannschaftA - 1);
						MeineMannschaft mannschaftBObjekt = tabelle.getMannschaftsliste().get(mannschaftB - 1);
						if (!((vergebeneMannschaften.contains(mannschaftAObjekt) || (vergebeneMannschaften.contains(mannschaftBObjekt)))))
						{
							if (!rueckrunde)
								spiel = new MeinSpiel(mannschaftAObjekt, mannschaftBObjekt, null, null);
							else
								spiel = new MeinSpiel(mannschaftBObjekt, mannschaftAObjekt, null, null);

							spiele.add(spiel);
							vergebeneMannschaften.add(mannschaftAObjekt);
							vergebeneMannschaften.add(mannschaftBObjekt);
							vergebeneSpiele = vergebeneSpiele + 1;
						}
					}
					mannschaftB = mannschaftB + 1;
				}
				mannschaftA = mannschaftA + 1;
				mannschaftB = 1;
			}
			mannschaftA = 1;
			while ((vergebeneMannschaften.contains(tabelle.getMannschaftsliste().get(mannschaftA - 1))))
			{
				mannschaftA = mannschaftA + 1;
			}
			if (!rueckrunde)
				spiel = new MeinSpiel(tabelle.getMannschaftsliste().get(mannschaftA - 1), tabelle.getMannschaftsliste().get(MANNSCHAFTSANZAHL - 1), null, null);
			else
				spiel = new MeinSpiel(tabelle.getMannschaftsliste().get(MANNSCHAFTSANZAHL - 1), tabelle.getMannschaftsliste().get(mannschaftA - 1), null, null);

			spiele.add(spiel);
			vergebeneSpiele = vergebeneSpiele + 1;

		}

		if (!rueckrunde)
			spieltag = new Spieltag(spieltagnr + 1, spiele);
		else
			spieltag = new Spieltag(spieltagnr + MANNSCHAFTSANZAHL, spiele);

		return spieltag;
	}
	
	
	
	/**
	 * Legt einen Spielplan an. Mischt zuerst die Mannschaften durch, da
	 * die Spielvergabe abhängig von der Position in der Liste erfolgt. So ist
	 * (fast) jeder neue Spielplan einzigartig.
	 *  * Wenn der Spieltag in der Rückrunde liegt wird beim Spieltag planen
	 * die Variable true übergeben, was der Methode spieltagPlanen den
	 * Befehl gibt die Spiele aus der Hinrunde zu reproduzieren und dabei Heim- und
	 * Gastmannschaft zu vertauschen. So findet jede Begegnung 2 mal statt und jede
	 * beteiligte Mannschaft darf 1 mal zuhause spielen.
	 */
	public void spielplanAnlegen()
	{
		final int MANNSCHAFTSANZAHL = tabelle.getMannschaftsliste().size();
		
		tabelle.mannschaftenMischen(tabelle.getMannschaftsliste());
		int zaehlvariable = 0;
		while (zaehlvariable < MANNSCHAFTSANZAHL - 1)
		{
			spielplan.add(spieltagPlanen(zaehlvariable, false));

			zaehlvariable++;
		}
		while (zaehlvariable > MANNSCHAFTSANZAHL - 2 && zaehlvariable < (MANNSCHAFTSANZAHL - 1) * 2)
		{
			spielplan.add(spieltagPlanen(zaehlvariable - MANNSCHAFTSANZAHL + 1, true));

			zaehlvariable++;
		}
	}
	
	
	
	/**
	 * @param spieltagnummer Erwartet die Nummer eines Spieltages der simuliert werden soll
	 * 
	 * Simuliert die Tore die in jeder Begegnung eines Spieltages gefallen sind und trägt sie 
	 * in Objekten vom Typ MeinSpiel ein
	 */
	public void spieltagSimulieren(int spieltagnummer)
	{
		for (MeinSpiel spiel : spielplan.get(spieltagnummer - 1).getSpiele())
		{
			spiel.setToreMannschaftA(stochastik.toreBeiSpielstaerke(spiel.getMannschaftA().getSpielstaerke()));
			spiel.setToreMannschaftB(stochastik.toreBeiSpielstaerke(spiel.getMannschaftB().getSpielstaerke()));

		}
	}

	
	
	/**
	 * @param bisSpieltagnummer	Erwartet die Nummer eines Spieltages BIS 
	 * zu dem die Spieltage simuliert werden sollen
	 * Ermöglicht es beispielsweise beim Fussball mit 18 Mannschaften 
	 * nur die ersten 17 Spieltage zu simulieren
	 * um so den Herbstmeister zu ermitteln.
	 */
	public void spieltageSimulieren(int bisSpieltagnummer)
	{
		int spieltagnummer = 1;
		while (spieltagnummer <= bisSpieltagnummer)
		{
			spieltagSimulieren(spieltagnummer);
			spieltagnummer = spieltagnummer + 1;
		}
	}
}
```


----------



## vfl_freak (23. Dezember 2009)

Moin,

zuerst: bitte halte Dich an die hier herrschende Netiquette (http://www.tutorials.de/index.php?pg=netiquette) - speziell Punkt 15 



kimi hat gesagt.:


> Hi. ich muss ein programm für ein baskettball sportliga schreiben. die paarungen, spieltag und spielplan erstellen genauso wie diese Internetseite.
> http://www.basketball-tabelle.de/basketball/bundesliga-herren/basketball-tabelle.php
> 
> Ich hab ein code für fußball aber ich weiß nicht wie ich das für baskettball schreiben soll. ich komme mit der poisson-verteilung und solche sachen nicht klar.



Willst Du jetzt in Java ein standalone-Programm schreiben oder soll es eine Website werden 

Was genau meinst Du mit "_poisson-verteilung_" 

Wo genau in Deinem Code hast Du denn ein Problem? Was funktioniert denn nicht? 

Gruß
Klaus


----------



## Bexx (23. Dezember 2009)

Ich glaube, das ist mit einer der unübersichtlichsten Codes die ich 
in meinem Leben je gesehen hab... 
Allein mich reinzulesen, wäre mir schon viel zu anstrengend...

Problembeschreibung ist leider mehr als mangelhaft :-(


----------



## kimi (23. Dezember 2009)

ich muss ein programm in java schreiben. es soll keine website werden.ich will nur die methoden spieltagPlanen, spielplanAnlegen und spieltagSimulieren geändert haben. oder so zu sagen anders schreiben.


----------

