Problem mit switch-Funktion

Status
Nicht offen für weitere Antworten.

Peacem4ker

Neues Mitglied
Moin
Also, ich hab zur Zeit langeweile und versuche grad mal ein primitives Fussballmanager-Spiel zu programmieren. Nun sitz ich gerade daran erstmal einen Spielablauf zu programmieren. Ich weiß, wahrscheinlich kann man das alles noch kürzer fassen, aber EIGENTLICH sollte es doch auch so richtig sein:
Ich rufe folgende Funktion mit den werten:
aktuellerStandort=7;
zeit=i;
toreA=0;
toreB=0;
vereinA=EinerDerErstelltenVereine;
vereinB=EinAndererErstellterVerein;
auf:

Java:
public class Ball {
		
	public static int[] neuerStandort (int aktuellerStandort, long zeit, int toreA, int toreB, Verein vereinA, Verein vereinB)
	{
	
		long neuerBesitzer=0;
		int aktuellerStandortEnde=0;
		long torschuss=0;
		int[] ausgabe=new int[3];
		
		{
			switch (aktuellerStandort)
			{
				case 1:
				{
					neuerBesitzer=Math.round((vereinA.staerkeAbwehr+vereinB.staerkeSturm)*Math.random());
					if ((neuerBesitzer<=(vereinA.staerkeAbwehr/4))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(1, 2); 
					if ((neuerBesitzer>(vereinA.staerkeAbwehr/4))&&(neuerBesitzer<=(vereinA.staerkeAbwehr/2))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(1,3); 
					if ((neuerBesitzer>(vereinA.staerkeAbwehr/2))&&(neuerBesitzer<=(vereinA.staerkeAbwehr/4*3))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(1,4);
					if ((neuerBesitzer>(vereinA.staerkeAbwehr/4*3))&&(neuerBesitzer<=(vereinA.staerkeAbwehr))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(1,5);
					if ((neuerBesitzer>(vereinA.staerkeAbwehr))&&(neuerBesitzer<=(vereinA.staerkeAbwehr+vereinB.staerkeSturm/3))) aktuellerStandortEnde=Ballwechsel.schlechterPass(1,22);
					if ((neuerBesitzer>(vereinA.staerkeAbwehr/4*3))&&(neuerBesitzer<=(vereinA.staerkeAbwehr+vereinB.staerkeSturm/3*2))) aktuellerStandortEnde=Ballwechsel.schlechterPass(1,21);
					if ((neuerBesitzer>(vereinA.staerkeAbwehr/4*3))&&(neuerBesitzer<=(vereinA.staerkeAbwehr+vereinB.staerkeSturm))) aktuellerStandortEnde=Ballwechsel.schlechterPass(1,20);
				}
				case 2:
				{
					neuerBesitzer=Math.round((vereinA.staerkeAbwehr+vereinB.staerkeSturm)*Math.random());
					if ((neuerBesitzer<=(vereinA.staerkeAbwehr/3))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(2, 6); 
					if ((neuerBesitzer>(vereinA.staerkeAbwehr/3))&&(neuerBesitzer<=(vereinA.staerkeAbwehr/3*2))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(2,7); 
					if ((neuerBesitzer>(vereinA.staerkeAbwehr/3*2))&&(neuerBesitzer<=(vereinA.staerkeAbwehr))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(2,8);
					if ((neuerBesitzer>(vereinA.staerkeAbwehr))&&(neuerBesitzer<=(vereinA.staerkeAbwehr+vereinB.staerkeSturm/3))) aktuellerStandortEnde=Ballwechsel.schlechterPass(2,22);
					if ((neuerBesitzer>(vereinA.staerkeAbwehr/4*3))&&(neuerBesitzer<=(vereinA.staerkeAbwehr+vereinB.staerkeSturm/3*2))) aktuellerStandortEnde=Ballwechsel.schlechterPass(2,21);
					if ((neuerBesitzer>(vereinA.staerkeAbwehr/4*3))&&(neuerBesitzer<=(vereinA.staerkeAbwehr+vereinB.staerkeSturm))) aktuellerStandortEnde=Ballwechsel.schlechterPass(2,20);
				}
				case 3:
				{
					neuerBesitzer=Math.round((vereinA.staerkeAbwehr+vereinB.staerkeSturm)*Math.random());
					if ((neuerBesitzer<=(vereinA.staerkeAbwehr/3))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(3, 6); 
					if ((neuerBesitzer>(vereinA.staerkeAbwehr/3))&&(neuerBesitzer<=(vereinA.staerkeAbwehr/3*2))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(3,7); 
					if ((neuerBesitzer>(vereinA.staerkeAbwehr/3*2))&&(neuerBesitzer<=(vereinA.staerkeAbwehr))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(3,8);
					if ((neuerBesitzer>(vereinA.staerkeAbwehr))&&(neuerBesitzer<=(vereinA.staerkeAbwehr+vereinB.staerkeSturm/3))) aktuellerStandortEnde=Ballwechsel.schlechterPass(3,22);
					if ((neuerBesitzer>(vereinA.staerkeAbwehr/4*3))&&(neuerBesitzer<=(vereinA.staerkeAbwehr+vereinB.staerkeSturm/3*2))) aktuellerStandortEnde=Ballwechsel.schlechterPass(3,21);
					if ((neuerBesitzer>(vereinA.staerkeAbwehr/4*3))&&(neuerBesitzer<=(vereinA.staerkeAbwehr+vereinB.staerkeSturm))) aktuellerStandortEnde=Ballwechsel.schlechterPass(3,20);
				}
				case 4:
				{
					neuerBesitzer=Math.round((vereinA.staerkeAbwehr+vereinB.staerkeSturm)*Math.random());
					if ((neuerBesitzer<=(vereinA.staerkeAbwehr/3))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(4, 6); 
					if ((neuerBesitzer>(vereinA.staerkeAbwehr/3))&&(neuerBesitzer<=(vereinA.staerkeAbwehr/3*2))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(4,7); 
					if ((neuerBesitzer>(vereinA.staerkeAbwehr/3*2))&&(neuerBesitzer<=(vereinA.staerkeAbwehr))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(4,8);
					if ((neuerBesitzer>(vereinA.staerkeAbwehr))&&(neuerBesitzer<=(vereinA.staerkeAbwehr+vereinB.staerkeSturm/3))) aktuellerStandortEnde=Ballwechsel.schlechterPass(4,22);
					if ((neuerBesitzer>(vereinA.staerkeAbwehr/4*3))&&(neuerBesitzer<=(vereinA.staerkeAbwehr+vereinB.staerkeSturm/3*2))) aktuellerStandortEnde=Ballwechsel.schlechterPass(4,21);
					if ((neuerBesitzer>(vereinA.staerkeAbwehr/4*3))&&(neuerBesitzer<=(vereinA.staerkeAbwehr+vereinB.staerkeSturm))) aktuellerStandortEnde=Ballwechsel.schlechterPass(4,20);
				}				
				case 5:
				{
					neuerBesitzer=Math.round((vereinA.staerkeAbwehr+vereinB.staerkeSturm)*Math.random());
					if ((neuerBesitzer<=(vereinA.staerkeAbwehr/3))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(5, 6); 
					if ((neuerBesitzer>(vereinA.staerkeAbwehr/3))&&(neuerBesitzer<=(vereinA.staerkeAbwehr/3*2))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(5,7); 
					if ((neuerBesitzer>(vereinA.staerkeAbwehr/3*2))&&(neuerBesitzer<=(vereinA.staerkeAbwehr))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(5,8);
					if ((neuerBesitzer>(vereinA.staerkeAbwehr))&&(neuerBesitzer<=(vereinA.staerkeAbwehr+vereinB.staerkeSturm/3))) aktuellerStandortEnde=Ballwechsel.schlechterPass(5,22);
					if ((neuerBesitzer>(vereinA.staerkeAbwehr/4*3))&&(neuerBesitzer<=(vereinA.staerkeAbwehr+vereinB.staerkeSturm/3*2))) aktuellerStandortEnde=Ballwechsel.schlechterPass(5,21);
					if ((neuerBesitzer>(vereinA.staerkeAbwehr/4*3))&&(neuerBesitzer<=(vereinA.staerkeAbwehr+vereinB.staerkeSturm))) aktuellerStandortEnde=Ballwechsel.schlechterPass(5,20);
				}
				case 6:
				{
					neuerBesitzer=Math.round((vereinA.staerkeMittelfeld+vereinB.staerkeMittelfeld)*Math.random());
					if ((neuerBesitzer<=(vereinA.staerkeMittelfeld/3))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(6, 9); 
					if ((neuerBesitzer>(vereinA.staerkeMittelfeld/3))&&(neuerBesitzer<=(vereinA.staerkeMittelfeld/3*2))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(6,10); 
					if ((neuerBesitzer>(vereinA.staerkeMittelfeld/3*2))&&(neuerBesitzer<=(vereinA.staerkeMittelfeld))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(6,11);
					if ((neuerBesitzer>(vereinA.staerkeMittelfeld))&&(neuerBesitzer<=(vereinA.staerkeMittelfeld+vereinB.staerkeMittelfeld/3))) aktuellerStandortEnde=Ballwechsel.schlechterPass(6,19);
					if ((neuerBesitzer>(vereinA.staerkeMittelfeld/4*3))&&(neuerBesitzer<=(vereinA.staerkeMittelfeld+vereinB.staerkeMittelfeld/3*2))) aktuellerStandortEnde=Ballwechsel.schlechterPass(6,18);
					if ((neuerBesitzer>(vereinA.staerkeMittelfeld/4*3))&&(neuerBesitzer<=(vereinA.staerkeMittelfeld+vereinB.staerkeMittelfeld))) aktuellerStandortEnde=Ballwechsel.schlechterPass(6,17);
				}
				case 7:
				{
					System.out.println("Test Wert von aktuellerStandort"+aktuellerStandort);
					neuerBesitzer=Math.round((vereinA.staerkeMittelfeld+vereinB.staerkeMittelfeld)*Math.random());
					if ((neuerBesitzer<=(vereinA.staerkeMittelfeld/3))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(7, 9); 
					if ((neuerBesitzer>(vereinA.staerkeMittelfeld/3))&&(neuerBesitzer<=(vereinA.staerkeMittelfeld/3*2))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(7,10); 
					if ((neuerBesitzer>(vereinA.staerkeMittelfeld/3*2))&&(neuerBesitzer<=(vereinA.staerkeMittelfeld))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(7,11);
					if ((neuerBesitzer>(vereinA.staerkeMittelfeld))&&(neuerBesitzer<=(vereinA.staerkeMittelfeld+vereinB.staerkeMittelfeld/3))) aktuellerStandortEnde=Ballwechsel.schlechterPass(7,19);
					if ((neuerBesitzer>(vereinA.staerkeMittelfeld/4*3))&&(neuerBesitzer<=(vereinA.staerkeMittelfeld+vereinB.staerkeMittelfeld/3*2))) aktuellerStandortEnde=Ballwechsel.schlechterPass(7,18);
					if ((neuerBesitzer>(vereinA.staerkeMittelfeld/4*3))&&(neuerBesitzer<=(vereinA.staerkeMittelfeld+vereinB.staerkeMittelfeld))) aktuellerStandortEnde=Ballwechsel.schlechterPass(7,17);
					System.out.println("Test Wert von aktuellerStandort"+aktuellerStandort);
				}	
				case 8:
				{
					System.out.println("Test Wert von aktuellerStandort"+aktuellerStandort);
					neuerBesitzer=Math.round((vereinA.staerkeMittelfeld+vereinB.staerkeMittelfeld)*Math.random());
					if ((neuerBesitzer<=(vereinA.staerkeMittelfeld/3))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(8, 9); 
					if ((neuerBesitzer>(vereinA.staerkeMittelfeld/3))&&(neuerBesitzer<=(vereinA.staerkeMittelfeld/3*2))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(8,10); 
					if ((neuerBesitzer>(vereinA.staerkeMittelfeld/3*2))&&(neuerBesitzer<=(vereinA.staerkeMittelfeld))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(8,11);
					if ((neuerBesitzer>(vereinA.staerkeMittelfeld))&&(neuerBesitzer<=(vereinA.staerkeMittelfeld+vereinB.staerkeMittelfeld/3))) aktuellerStandortEnde=Ballwechsel.schlechterPass(8,19);
					if ((neuerBesitzer>(vereinA.staerkeMittelfeld/4*3))&&(neuerBesitzer<=(vereinA.staerkeMittelfeld+vereinB.staerkeMittelfeld/3*2))) aktuellerStandortEnde=Ballwechsel.schlechterPass(8,18);
					if ((neuerBesitzer>(vereinA.staerkeMittelfeld/4*3))&&(neuerBesitzer<=(vereinA.staerkeMittelfeld+vereinB.staerkeMittelfeld))) aktuellerStandortEnde=Ballwechsel.schlechterPass(8,17);
				}
....... und so weiter

allerdings bekomme ich bei Ausführung folgendes ergebnis:
Test Wert von aktuellerStandort7
Die Nummer 7 verliert den Ball an Nummer 17
Test Wert von aktuellerStandort7
Test Wert von aktuellerStandort7
Die Nummer 8 spielt einen erfolgreichen Pass zu Nummer 11
Die Nummer 8 verliert den Ball an Nummer 18
Die Nummer 8 verliert den Ball an Nummer 17
Die Nummer 9 verliert den Ball an Nummer 16
......
Wie kann es dazu kommen, das er plötzlich in das "case 8:" reingeht, obwohl aktuellerStandort=7 ist?

Kann mir jemand helfen?

Danke schon mal 🙂
 
und ansonsten heißt Programmieren auch nicht 'tausende Fälle einzeln aneinanderreihen'

ein Block
if ((neuerBesitzer<=(vereinA.staerkeAbwehr/3))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(2, 6);
if ((neuerBesitzer>(vereinA.staerkeAbwehr/3))&&(neuerBesitzer<=(vereinA.staerkeAbwehr/3*2))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(2,7);
if ((neuerBesitzer>(vereinA.staerkeAbwehr/3*2))&&(neuerBesitzer<=(vereinA.staerkeAbwehr))) aktuellerStandortEnde=Ballwechsel.erfolgreicherPass(2,8);
if ((neuerBesitzer>(vereinA.staerkeAbwehr))&&(neuerBesitzer<=(vereinA.staerkeAbwehr+vereinB.staerkeSturm/3))) aktuellerStandortEnde=Ballwechsel.schlechterPass(2,22);
if ((neuerBesitzer>(vereinA.staerkeAbwehr/4*3))&&(neuerBesitzer<=(vereinA.staerkeAbwehr+vereinB.staerkeSturm/3*2))) aktuellerStandortEnde=Ballwechsel.schlechterPass(2,21);
if ((neuerBesitzer>(vereinA.staerkeAbwehr/4*3))&&(neuerBesitzer<=(vereinA.staerkeAbwehr+vereinB.staerkeSturm))) aktuellerStandortEnde=Ballwechsel.schlechterPass(2,20);

dürfte doch reichen,
der erste Parameter von erfolgreicherPass bzw. schlechterPass scheint genau dem switch-Wert zu entsprechenen,
ein bisschen ist noch anders, die zweiten Parameter für Pass und paar Zahlen in den ifs variieren 3x mal, das kann man aber leichter in einer einfachen Variable konfigurieren,
z.B. mit einem switch, welches nur die Parameter setzt, nicht den ganzen Code wiederholt

--

selbst ein einzelner solcher Block ist noch zu viel Code,

die ifs z.B.:
bestimme einmal wer der Gegner ist (Abwehr, Mittelfeld, Sturm?)
berechne dann einmal das Verhältnis
double x = neuerBesitzer/vereinA.staerke;
und vergleiche dann höchstens
if (x < 0.75)
if (x >= 1)
usw.


und wenn du eine Variable in 10 Zeilen 10x schreiben muss (oder gar wie bei dir in 100 Zeilen 100x)
dann kannst du sie auch ausnahmsweise a nennen statt aktuellerStandortEnde,
 
Erstmal vielen dank für die schnellen Antworten. Läuft jetzt alles so wie ich es will 🙂

@SlaterB

Danke für die Tipps, das ein vernünftiges Programm so nicht aussehen sollte weiß ich auch 🙂 Aber mir gehts jetzt immoment erstmal darum dass das ganze überhaupt läuft, um die Vereinfachung und Verkürzung kümmer ich mich aber sicherlich auch noch😉 Werde dabei auch deine Vorschläge berücksichtigen 😉
Aber meine schöne Variable aktuellerWertEnde kann ich leider nicht umbennen... ich kenn mich und weiß das ich in 2-3 Wochen die Motivatione erstmal wieder verlieren werde und dann erst in 1-2 Monaten weiter mach... mit "a" kann ich dann nix anfangen, aber so komm ich immer schnell wieder rein.
Dazu kommt, das das auch noch nicht meine finale Spielsimulation sein soll... da müssen noch viele Feinheiten kommen. Immoment schießen bspw nur Stürmer Tore. Und Querpässe gibts auch nicht. Nur nach vorne oder Ball verlieren. Aber wie gesagt ich kümmer mich auf jeden Fall noch drum das es kürzer wird 🙂 Wenn ich nochmal n Problem hab komm ich nochmal wieder 🙂
 
Aber meine schöne Variable aktuellerWertEnde kann ich leider nicht umbennen... ich kenn mich und weiß das ich in 2-3 Wochen die Motivatione erstmal wieder verlieren werde und dann erst in 1-2 Monaten weiter mach... mit "a" kann ich dann nix anfangen, aber so komm ich immer schnell wieder rein.

Du kannst deinen Quellcode auch mit Kommentaren versehen.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben