# Fussballspiel



## Alexander Anfänger (15. Aug 2017)

Servus 
Komme bei einer Aufgabe nicht weiter, wo es um "If " Verschachtlungen geht.
Aufgabe im Anhang.

Mein Ansatz bei dem ich nicht weiter komme.

```
.
public class Fusballspiel {


    public static void main(String[] args) {
        // TODO Auto-generated method stub
       
        // Deklaration
           
        String mannschaft1 = "Schalke" ;
        String mannschaft2 = "Dortmund" ;
        String zone = "Ball ist im Mittelfeld" ;
        double zufallszahl ;
       

       
        for(int i = 0 ; i< 91 ; i++)
        {
        System.out.println(i + ". Minute: " + zone);
        zufallszahl = Math.random()*100 ;
        System.out.println(zufallszahl);
       
        if(zone.equals("Ball ist im Tor von Dortmund")){
        zone = "Ball ist im Mittelfeld" ;
        {
       
        }
        }
        if (zufallszahl <= 30.0){
            zone = "Ball ist vor dem Tor von "+ mannschaft1 ;
           
            zufallszahl = Math.random()*100 ; 
            System.out.println(zufallszahl);
            if(zufallszahl <= 10.0){
                zone = "Ball ist im Tor von " + mannschaft1 ;
               
                   
        }
           
            }
                }
  }
}
```
Über Ideen und Tipps wäre ich sehr dankbar.
Mfg


----------



## T_T (15. Aug 2017)

Im Allgemeinen ist die Einrückung ein Schreckenspiel.

Und:
- Wo kommst du nicht weiter / Wo klemmts ?
- Raten mag hier keine


----------



## VfL_Freak (15. Aug 2017)

Moin,

*add 1:* formatiere den Code bitte mal so, dass man ihn lesen kann. Ich vermute als erstes mal ganz pauschal einen Klammerungsfehler 
*add 2:* poste Deinen Code (oder was auch immer es ist) hier direkt, so wie am Anfang. Hier werden die wenigsten diffuse PDFs öffnen wollen! Außerdem lassen sich nur dann Teile daraus sinnvoll zitieren
*add 3:* wie @T_T schon schreibt: kein Mensch weiß, was genau Dein Problem ist ... 
Kommen Fehlermeldungen? Welche? StackTrace? 

Lies Dir bitte mal dies hier durch:
http://www.java-forum.org/forum-faq-beitraege/7407-man-fragen-richtig-stellt.html

VG Klaus


----------



## Alexander Anfänger (15. Aug 2017)

Das meine Versuche eine Sinnvolle Verschachtlung der If's nichts bringen.
Und sorry wegen der Einrückung.
Gruß


----------



## VfL_Freak (15. Aug 2017)

Moin,
dann will ich mal nicht so sein ... habe heute meine sozialen Tag:

```
public class Fusballspiel
{
    public static void main(String[] args)
    {
        // TODO Auto-generated method stub

        // Deklaration
        String mannschaft1 = "Schalke" ;
        String mannschaft2 = "Dortmund" ;
        String zone = "Ball ist im Mittelfeld" ;
        double zufallszahl ;

        for(int i = 0 ; i< 91 ; i++)
        {
            System.out.println(i + ". Minute: " + zone);
            zufallszahl = Math.random()*100 ;
            System.out.println(zufallszahl);

            if(zone.equals("Ball ist im Tor von Dortmund"))
            {
                zone = "Ball ist im Mittelfeld" ;
                // {} = obsolet !!
            }
            if( zufallszahl <= 30.0 )
            {
                zone = "Ball ist vor dem Tor von "+ mannschaft1 ;
                zufallszahl = Math.random()*100 ;
                System.out.println(zufallszahl);
                if(zufallszahl <= 10.0)
                {
                    zone = "Ball ist im Tor von " + mannschaft1 ;
                }
            }
        } // for
    } // main
} // class
```
Eine echte Verschachtelung sehe ich hier nur bedingt!
Ich verstehe aber auch nicht, was der Code im einzelnen bewerkstelligen soll 
Was hat es denn mit den Zufallszahlen (double??) genau auf sich ??

Und dieser Teil hier ist irgendwie auch ziemlich sinnfrei 
*EDIT:* ok, beim nächsten  Schleifendurchlauf könnte das doch kommen ...


```
if(zone.equals("Ball ist im Tor von Dortmund"))
{
    zone = "Ball ist im Mittelfeld" ;
    // {} = obsolet !!
}
```

Versuch doch mal ein paar Komentare einzufügen, wo Du beschreibst, was die einzelnen Codeteile machen sollen !

VG Klaus


----------



## Alexander Anfänger (15. Aug 2017)

math.Random () liefert eine Zahl zwischen 0,1 und 1,0, deshalb Double.

Es gibt ja fünf Möglichkeiten 
--> Der Ball ist im Mittelfeld
--> Linker und rechter Strafraum
--> Im Tor 

Daraus muss ich ja jetzt einen "Weg" basteln 
Gruß


----------



## VfL_Freak (15. Aug 2017)

Moin,


Alexander Anfänger hat gesagt.:


> math.Random () liefert eine Zahl zwischen 0,1 und 1,0, deshalb Double


mach es doch einfach so:

```
int zufallszahl = (int)(Math.random()*100);
```
Dann musst Du dich zumindest nicht mit den double-Werten rumschlagen 

VG Klaus


----------



## Alexander Anfänger (16. Aug 2017)

```
import java.util.Scanner;
public class Fusballspiel {


    public static void main(String[] args) {
        // TODO Auto-generated method stub
       
        // Deklaration
           
        String mannschaft1 = "Schalke" ;
        String mannschaft2 = "Dortmund" ;
        String zone = "Ball ist im Mittelfeld" ;
        int zufallszahl ;
       
        for(int i = 0 ; i< 91 ; i++){
        System.out.println(i + ". Minute: " + zone);
        zufallszahl = (int) (Math.random()*100) ;
        // Way in the right area
        if(zone.equals("Ball ist im Tor von Dortmund")){
        zone = "Ball ist im Mittelfeld" ;
        }
        if(zone.equals("Ball ist im Tor von Schalke")){
            zone = "Ball ist im Mittelfeld" ;
            }
        if(zufallszahl > 39){
            zone = "Ball ist im Mittelfeld";   
            }
       
        if (zufallszahl <= 30){
            zone = "Ball ist vor dem Tor von "+ mannschaft1 ;
           
            if(zufallszahl <= 10)
                zone = "Ball ist im Tor von " + mannschaft1 ;
            }
            //Way in the left Area
            else{
                if(zufallszahl > 39){
                    zone = "Ball ist im Mittelfeld";   
                    }
               
                if (zufallszahl <= 30){
                    zone = "Ball ist vor dem Tor von "+ mannschaft2 ;
                   
                    if(zufallszahl <= 10)
                        zone = "Ball ist im Tor von " + mannschaft2 ;
                    }
                }
            }
        }       
    }
```

Jetzt habe ich eine Verschachtlung mit Kommentaren 
Der Else Block wird jedoch nicht angerührt.
Jemand eine Idee wie ich das vielleicht besser lösen kann ?
Gruß


----------



## T_T (19. Aug 2017)

Alexander Anfänger hat gesagt.:


> Der Else Block wird jedoch nicht angerührt.
> Jemand eine Idee wie ich das vielleicht besser lösen kann ?


Also folgendes ist Prinzipiell möglich

```
if(foo)
   System.out.println(bar);
```

Jedoch empfehle ich, zum besseren Verständnis und für das bessere lesen folgendes:

```
if(foo) {
   System.out.println(bar);
}
```
 Damit ist es direkt gekapselt und man versteht dies auf dem ersten Blick, grad wenn du wie in deinem obigen Beispiel mehrere ifs ineinander hast.

Dann zu deinem Problem:

Du frägst in deiner if folgendes ab:

- Ist die Zufallszahl *größer *39, also 40, dann mache xy
- Ist die Zufallszahl *kleiner oder gleich* 30 dann mache yx
    # trifft kleiner oder gleich 30 NICHT zu, dann gehe in den else Zweig.

Und genau dort kommt die gleiche Anweisung "größer 39" "kleiner oder gleich 30"....

Was ist aber mit dem Fall, wenn deine Zufallszahl zwischen 31 und 39 liegt?
Das hast du mit deinem Codeschnipsel nicht bedacht.
Bzw. Wenn die if mit <= 30 nicht zutrifft, dann wird es dies auch nicht in dem else Zweig.

Ich hoffe, das war hilfreich zur Lösung deines Problems.


----------



## Leon_2001 (19. Aug 2017)

du könntest dein Spiel evtl realistischer gestalten, indem du auf die Zone eingehst in der Ball grade liegt.

Als pseudo code also:

wenn: Ball im Mittelfeld
   wenn: Zahl > 60 && < 90
       dann: Ball Strafraumzone rechts
   wenn: Zahl < 40 && > 10
       dann: Ball Strafraumzone links
   wenn: Zahl >= 40 && <= 60
       dann: Ball Mittelfeld
   wenn: Zahl >= 90
       dann: Ball im rechten Tor
   wenn: Zahl <= 10
      dann: Ball im linken Tor
wenn: Ball im rechten Strafraum
   wenn: Zahl ...
     dann ...
   wenn: Zahl ...
     dann...
   Hier kannst du dir überlegen, was wahrscheinlich ist:
    - Tor rechts 30%
    - Tor links 5%
    - der Ball bleibt im Strafraum (für eine Minute ---> unwahrscheinlich) 5%
    - Befreiungsschlag Mittelfeld vlt. 35%
    - Befreiungsschlag Strafraum (bzw. ein bisschen davor vlt.) 25%

Außerdem solltest du dir überlegen, was im Fußball passiert, wenn der Ball tatsächlich im Tor landet... dann würde nämlich aktuell einfach nur die Meldung kommen Ball ist im Tor und dann springt der Ball vlt. einfach von einem Tor ins andere usw. das ist ja in echt ein wenig anders

Hinweis: Hier könnte eine Switch Konstruktion recht nützlich sein, dennoch würde ich es für den Anfang erstmal mit if und if else machen, damit du lernst damit umzugehen


----------



## Alexander Anfänger (22. Aug 2017)

@Leon_2001  vielen Dank für diesen Ansatz. Ich werde es mal ausprobieren


----------

