continue macht ärger

Status
Nicht offen für weitere Antworten.

assault

Aktives Mitglied
Hi @ all

also bin momentan auf der arbeit uns soll java lernen, an sich nichts schlimmes aber iergendwie komme ich an der aufgabe

http://www.java-wi.de/uebungen/U-07.pdf

,ist die Aufgabe 7.4,

nicht weiter :cry:

Code:
public class monte_karlo_nights 
{
public static void main (String[]ages)
{
	int kap = 10000;
	boolean win = true;
	int satz = 10;
	
	while( kap >= 0);
	{
		if (kap>10000)
		{	if (win = true) 
				{satz = 10;
				}
			else {satz = satz*2;}
		}
		
		else {satz = (10000 - (kap*2));}

		if (satz > 1000){satz = 1000;}
		if (satz > kap){satz = kap;}


		int k =(int)(Math.random()*37);

		if (k == 0) continue;
		if (k%2 == 0){ win = true; kap = kap + satz;}
		else {win = false; kap = kap - satz;}
				
			
	}
		
		
	
		
		
	}
}
der code an sich müsste eigentlich nach meinem wissensstand funtzen, aber ich bekomme immer die Fehlermeldung das er den continue in zeile 27 nicht aktzeptiert, sie wäre ausserhalb der schleife :autsch:
 
S

SlaterB

Gast
sie IST außerhalb der Schleife,
da die Schleife
while( kap >= 0);
beim ; 10 Zeichen hinter dem while endet

-> Endlosschleife übrigens, sei froh dass es nicht läuft
 

assault

Aktives Mitglied
SlaterB hat gesagt.:
sie IST außerhalb der Schleife,
da die Schleife
while( kap >= 0);
beim ; 10 Zeichen hinter dem while endet

-> Endlosschleife übrigens, sei froh dass es nicht läuft

wie kommst du darauf das es ne endlos schleife ist? wenn der Zähler(das kapital 0 erreicht) ist die schleife doch zu ende oder? Und dann muss ich doch einfach nur das ";" löschen?
 
S

SlaterB

Gast
jo, ich meinte durch den Semikolon-Fehler wirds ne Endlosschleife,
das muss weg, dann dürfte alles gut sein (ohne näher die anderen 25 Zeilen anzuschauen)
 

assault

Aktives Mitglied
bräuchte nochmal hilfe :cry:

das teil ist jetzt doch noch zu ner endlosschleife mutiert :(


Code:
public class monte_karlo_nights 
{
public static void main (String[]ages)
{
	int kap = 10000;
	boolean win = true;
	int satz = 10;
	int roundcount= 0;
	
	while( kap >= 0)
	{
		if (kap>10000)
		{	if (win = true) 
				{satz = 10;
				}
			else {satz = satz*2;}
		}
		
		else {satz = (10000 - (kap*2));}

		if (satz > 1000){satz = 1000;}
		if (satz > kap){satz = kap;}


		int k =(int)(Math.random()*37);

		if (k == 0) continue;
		if (k%2 == 0){ win = true; kap = kap + satz;}
		else {win = false; kap = kap - satz;}
	
	roundcount = roundcount +1;
	 System.out.println("Runde: " + roundcount + "  Kapital: " + kap+ " wurf: " + k + " Einsatz: " + satz );
				
			
	}
		
		
	
		
		
	}
}

und zwar schein er nicht wirklich erkennen zu wollen das er auch mal verlieren muss und schein bar kann er auch nicht die erste "if(win = true)" auslesen zu können zumindest laut eclipse, den der sagt "boolean win = true" würde nie gelesen werden :(

hier noch die letzten durchläufe der schleife befor ich gestoppt habe ....

Runde: 143463 Kapital: 28260 wurf: 1 Einsatz: 10
Runde: 143464 Kapital: 28250 wurf: 31 Einsatz: 10
Runde: 143465 Kapital: 28240 wurf: 15 Einsatz: 10
Runde: 143466 Kapital: 28250 wurf: 6 Einsatz: 10
Runde: 143467 Kapital: 28240 wurf: 7 Einsatz: 10
Runde: 143468 Kapital: 28230 wurf: 9 Einsatz: 10
Runde: 143469 Kapital: 28240 wurf: 4 Einsatz: 10
Runde: 143470 Kapital: 28230 wurf: 13 Einsatz: 10
Runde: 143471 Kapital: 28220 wurf: 21 Einsatz: 10
 

assault

Aktives Mitglied
Sorry wenn ich euch nerfe aber jetzt änert sich das Kapital gar nicht und der einsatzt ist immer null :( ich könnt heuelen sitzt schon fast dne ganzen tag dran es zum laufen zu bekommen
 
S

SlaterB

Gast
du musst schon sagen was dein Programm machen soll oder nicht,
was richtig und was falsch ist

Code:
public class Test
{

    public static void main(String[] ages)
        throws Exception
    {
        int kap = 10000;
        boolean win = true;
        int satz = 10;

        while (kap >= 0)
        {
            if (kap > 10000)
            {
                if (win == true)
                {
                    satz = 10;
                }
                else
                {
                    satz = satz * 2;
                }
            }
            else
            {
                satz = (10000 - (kap * 2));
            }


            if (satz > 1000)
            {
                satz = 1000;
            }
            if (satz > kap)
            {
                satz = kap;
            }


            int k = (int)(Math.random() * 37);
            System.out.println("kap: " + kap + ", satz: " + satz + ", k: " + k);
            Thread.sleep(300);

            if (k == 0) continue;
            if (k % 2 == 0)
            {
                win = true;
                kap = kap + satz;
            }
            else
            {
                win = false;
                kap = kap - satz;
            }
        }
    }
}



Ausgabe:
kap: 10000, satz: -10000, k: 1
kap: 20000, satz: -20000, k: 33
kap: 40000, satz: -40000, k: 21
kap: 80000, satz: -80000, k: 32
kap: 0, satz: 0, k: 1
kap: 0, satz: 0, k: 10
kap: 0, satz: 0, k: 11
kap: 0, satz: 0, k: 28
kap: 0, satz: 0, k: 30
kap: 0, satz: 0, k: 23
kap: 0, satz: 0, k: 36

wenn das Kapital 0 ist, dann ist die Schleife in einer Endlosschleife ja,
was soll man dazu sagen?
breche bei 0 ab oder tue irgendwas, du hast die freie Wahl es nach deinen Wünschen zu programmieren


edit: halt, ich war beim Code ganz oben, scheint sich ja inzwischen geändert zu haben,
werden dann gleich noch dieses Posting hier editieren

edit 2: auch bei der neuen Version wird bei Kaptial <= 10000 am Anfang ein 'Satz' von -10000 gewählt,
das Kapital geht schnell auf 0 runter
 

assault

Aktives Mitglied
?????

bei mir siehtdie Ausgabe bisshcen anders aus??? *confused*

Runde: 2820 Kapital: 10000 wurf: 23 Einsatz: 0
Runde: 2821 Kapital: 10000 wurf: 5 Einsatz: 0
Runde: 2822 Kapital: 10000 wurf: 1 Einsatz: 0
Runde: 2823 Kapital: 10000 wurf: 28 Einsatz: 0
Runde: 2824 Kapital: 10000 wurf: 31 Einsatz: 0
Runde: 2825 Kapital: 10000 wurf: 19 Einsatz: 0
Runde: 2826 Kapital: 10000 wurf: 7 Einsatz: 0
Runde: 2827 Kapital: 10000 wurf: 19 Einsatz: 0
Runde: 2828 Kapital: 10000 wurf: 33 Einsatz: 0

bei mir wenn ich ihn durchlaufen lasse zieht der gar nichts vom Kapital ab

Code:
public class monte_karlo_nights 
{
public static void main (String[]ages)
{
	int kap = 10000;
	boolean win = true;
	int satz = 10;
	int roundcount= 0;
	
	while( kap >= 0)
	{
	
		if (kap>10000)
		{	if (win == true) 
				{satz = 10;
				}
			else {satz = satz*2;}
		}
		
		else {satz = ((10000 - kap)*2);}

		if (satz > 1000){satz = 1000;}
		if (satz > kap){satz = kap;}


		int k =(int)(Math.random()*37);

		if (k == 0) continue;
		if (k%2 == 0){ win = true; kap = kap + satz;}
		else {win = false; kap = kap - satz;}
	
	roundcount = roundcount +1;
	 System.out.println("Runde: " + roundcount + "  Kapital: " + kap+ " wurf: " + k + " Einsatz: " + satz );
				
			
	}	
		
}
}
 
S

SlaterB

Gast
ja weil du zwischendurch den Code änderst,
wie soll ich denn bitte deinen privaten Code vorherahnen?..

statt
> satz = (10000 - (kap * 2));
hast du nun also
> satz = ((10000 - kap) * 2);

und jetzt überlege mal, was da am Anfang bei kap = 10000 rauskommt?
richtig, 0, Einsatz 0, nix passiert

also wenn du solche 3 Sekunden-Denker nicht drauf hast..
 

assault

Aktives Mitglied
SlaterB hat gesagt.:
ja weil du zwischendurch den Code änderst,
wie soll ich denn bitte deinen privaten Code vorherahnen?..

statt
> satz = (10000 - (kap * 2));
hast du nun also
> satz = ((10000 - kap) * 2);

und jetzt überlege mal, was da am Anfang bei kap = 10000 rauskommt?
richtig, 0, Einsatz 0, nix passiert

also wenn du solche 3 Sekunden-Denker nicht drauf hast..

sorry dachte hätte den aktuelsten Code schon gepostet

Edit der geht doch aber satz = ((10000 - kap) * 2); erste rein wenn das Kap kleiner 1000 ist deshalb dürfte es nach der ersten runde ja nicht auf null kommmen und auch nicht beim ersten durchlauf hier in dieser schleifen stelle weil da kommt er ja erst rein wenn das kap uter 10000 ist zum beispiel nur noch 9000 dann erstellt er einen einsatzt von 2000 und korigiert ihn nochmal auf 1000 runter ... oder sollte er zumindest
 
G

Gast

Gast
Hallo,

keine Ahnung, ob Du noch einen Hinweis brauchst...
Deine erstes if lautet (kap>10000). Da 10000 aber nicht größer 10000 ist, geht er gleich in den else-Teil und rechnet nun dort mit (10000-10000)*2. Da die Anweisung auch lautet "Wenn Sie im Besitz von MINDESTENS 10000 GE sind", sollte dein erstes if-Statement
if (kap >= 10000)
lauten. Ausserdem solltest Du beachten, dass im Gewinnfall das Doppelte des Gesetzten ausgezahlt werden soll und Du ja auch das Kapital vorher und nachher ausgeben sollst.

MfG
Stefan
 
G

Guest

Gast
Gast hat gesagt.:
Hallo,

keine Ahnung, ob Du noch einen Hinweis brauchst...
Deine erstes if lautet (kap>10000). Da 10000 aber nicht größer 10000 ist, geht er gleich in den else-Teil und rechnet nun dort mit (10000-10000)*2. Da die Anweisung auch lautet "Wenn Sie im Besitz von MINDESTENS 10000 GE sind", sollte dein erstes if-Statement
if (kap >= 10000)
lauten. Ausserdem solltest Du beachten, dass im Gewinnfall das Doppelte des Gesetzten ausgezahlt werden soll und Du ja auch das Kapital vorher und nachher ausgeben sollst.

MfG
Stefan

Jo dankeschön aber mittlerweile leuft alles :D
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben