Switch Methode macht Code kaputt

visar77

Mitglied
Ich versuche einen Elo-Simulator zu programmieren. Durch die Kommentare am Anfang (sorry fürs schlechte Englisch) hab ich kurz und knapp erklärt was das Programm so tut. Ich versuche nun Elo-Tiers hinzufügen, damit ich weiß wie viele Spiele ich ungefähr spielen muss um die z.b Platinum 2 zu erreichen. Wenn ich aber die SwitchMethoden hinzufüge, dann funktioniert mein Code nicht mehr.

Java:
import java.util.Random;
import java.util.Scanner;
public class EloSimulator {
    /*This Code will simulate:
     * -The player starting at a specific amount of LP to 100
     * -If the player reaches 100 LP he will do his promo
     * -If he wins his promo he will add it to PromosWon/if he loses nothing happens and the simulations goes to the next player
     * -After that process the simulation restarts with another player with the same amount of LP
     * -The Player will not demote he will have negative Lp but he wont demote because I didn't take it into account so dont hate pls
     */
    
    public static void main(String[]args) {
        //Editable/you can edit the code underneath this comment
        int TRank = 0;
        int TRank2 = 0;
        int AmountofSimulations = 1000;
        int maxLPWON = 24;
        int minLPWON = 17;
        int maxLPLOST = 17;
        int minLPLOST = 13;
        int Winrate = 49;
        int StartingLP = 0;
        //not editable/you shouldn't edit the code underneath this comment
        int Simulations = 0;
        int PromosWon = 0;
        int[] GArray = new int[AmountofSimulations+1];
        Scanner sc = new Scanner(System.in);
        System.out.println("Rank:");
        String Rank = sc.next();
        System.out.println("Tier:");
        int Tier = sc.nextInt();
        System.out.println("Rank:");
        String Rank2 = sc.next();
        System.out.println("Tier:");
        int Tier2 = sc.nextInt();
        switch(Rank) {
        case "Iron":
                 TRank=0;
            break;
        case "Bronze":
                 TRank=4;
            break;
        case "Silver":
                TRank=4;
            break;
        case "Gold":
                TRank=12;
            break;
        case "Platinum":
                TRank=16;
            break;
        case "Diamond":
            TRank=20;
            break;
            default:
                System.out.println("Fehler");
                break;
        
        }
        switch (Tier) {
        case 1:
            TRank=TRank+3;
            break;
        case 2:
            TRank=TRank+2;
            break;
        case 3:
            TRank=TRank+1;
            break;   
            default:
                TRank=TRank+0;
                break;
        }
        switch(Rank2) {
        case "Iron":
                 TRank2=0;
            break;
        case "Bronze":
                 TRank2=4;
            break;
        case "Silver":
                TRank2=4;
            break;
        case "Gold":
                TRank2=12;
            break;
        case "Platinum":
                TRank2=16;
            break;
        case "Diamond":
                TRank2=20;
            break;
        default:
            System.out.println("Fehler");
            break;
        
        }
        switch (Tier2) {
        case 1:
            TRank2=TRank2+3;
            break;
        case 2:
            TRank2=TRank2+2;
            break;
        case 3:
            TRank2=TRank2+1;
            break;
        default:
            TRank2=TRank2+0;
            break;
        }
        while(Simulations<AmountofSimulations) {
            int Games = 0;
            int LP = StartingLP;
            do {
                double Winrate2 = Math.random()*100;
                int LPLost= new Random().nextInt((maxLPLOST-minLPLOST)+1)+minLPLOST;
                int LPWIN = new Random().nextInt((maxLPWON-minLPWON)+1)+minLPWON;
                if(Winrate2<Winrate) {
                    LP=LP+LPWIN;
                }
                else {
                    LP=LP-LPLost;
                }
                Games++;
                
            }
        
            while(LP<100);
            Simulations++;
            GArray[Simulations] = Games;
            if(LP>=100) {
                int PromoGamesWON = 0;
                do {
                    if(TRank % 4 ==3) {
                        for(int i=1; i<5; i++) {
                        double Winrate2 = Math.random()*100;
                        if(Winrate2<Winrate) {
                            PromoGamesWON++;
                            Games++;
                            if(PromoGamesWON==3) {
                                TRank++;
                            }
                        }
                        
                    }
                    }
                    else {
                        for(int i=1; i<3; i++) {
                            double Winrate2 = Math.random()*100;
                            if(Winrate2<Winrate) {
                                PromoGamesWON++;
                                Games++;
                                if(PromoGamesWON==2) {
                                    TRank++;
                                }
                            }
                    }
                }
                
            }
                while(TRank!=TRank2);
            
                
            }
        }
        
        int x = 0;
        for(int i:GArray) {
            x=x+i;
        }
        
        double y = AmountofSimulations*10/10;
        x=x/GArray.length;
        System.out.println("Average Games: "+x);
        System.out.println("Percentage of Promos won: "+(PromosWon/y)*100+"%");
    }
}

Wenn ich die Switchmethoden weglasse, dann klappt der restliche Code.
Kann mir jemand erklären, was ich denn falsch mache.
Danke im Voraus.

Lg,
Visar
 
K

kneitzel

Gast
Kannst Du einmal im Detail erläutern, was "funktioniert mein Code nicht mehr" heißt. Was für Fehler / Verhalten treten auf und was wäre das erwartete Verhalten?
 

visar77

Mitglied
Kannst Du einmal im Detail erläutern, was "funktioniert mein Code nicht mehr" heißt. Was für Fehler / Verhalten treten auf und was wäre das erwartete Verhalten?
Also wenn ich dieses Programm ohne Switch ausführe, dann bekomme ich die "Average Games" raus . Wenn ich die Switch methoden hinzufügen kommt absolut nichts raus. Einfach nichts. (Ich benutze Eclipse)
 

LimDul

Top Contributor
Definiere "Funktioniert nicht"? Wo kommt was falsches raus. Welche Variablen haben dann den falschen Wert? Wo läuft was schief? (Ich hab wenig Lust mir derartig viel, relativ unstruktrierten Code anzusehen und zu verstehen was da passieren soll)
 

temi

Top Contributor
Also wenn ich dieses Programm ohne Switch ausführe, dann bekomme ich die "Average Games" raus . Wenn ich die Switch methoden hinzufügen kommt absolut nichts raus. Einfach nichts. (Ich benutze Eclipse)
Zeig doch mal den Code ohne Switch, so wie er noch funktioniert und erkläre uns dann, was du mit dem switch erreichen möchtest (wenn der Code vorher doch funktioniert hat).
 

temi

Top Contributor
Entweder nutze einen Debugger oder setze zwischen den einzelnen switch Gruppe ein paar Ausgaben (z.B. TRank, dann siehst du auch den zugewiesenen Wert), damit du siehst wo du hängen bleibst.
 

LimDul

Top Contributor
Du hast lauter Magic Numbers im Code, die kein außenstehender versteht.

Warum ist bei Bronze und Silber TRank 4? Warum überhaupt 4er Schritter? Was ist TRank und TRank2 überhaupt? Was tun die? Dein Code ist - so wie er dasteht - leider für einen Aißenstehende schlicht unverständlich. Schau mal mit einem Debugger rein, was passiert, aber von außen ist das schwer.

Außerdem wäre es hilfreich, bei "funktioniert nicht" mal genau anzugeben:
* Was hast du als Eingabe eingegeben
* Was kommt als Ausgabe raus
* Was sollte als Ausgabe rauskommen

Und zwar konkret nicht "Es sollte was berechnetes rauskommen - sondern was genau für Werte"
 

visar77

Mitglied
Diese Ranks und Tiers sind einfach Ranks und Tiers aus League of Legends. Niedrigster Rank ist iron, höchster Diamond und niedrigstes Tier ist 4 und höchstes Tier ist 1. Heißt wenn ich Iron 3 als erstes Rank eingebe und Gold 1 als zweitens, heißt es dass ich ausrechnen will wie viele Spiele es dauert bis ich von Iron 3 zu Gold 1 komme.
 
K

kneitzel

Gast
Was machst Du denn für Eingaben? Mal in einem Debugger ausgeführt? Mal die Variablen TRank und TRank2 in der do/while Schleife ausgeben?

Wenn TRank2 < TRank sein sollte, dann ist es eine Endlosschleife, da TRank immer nur erhöht wird, wenn ich das richtig gesehen habe ...
 

visar77

Mitglied
Wenn TRank2 < TRank sein sollte, dann ist es eine Endlosschleife, da TRank immer nur erhöht wird, wenn ich das richtig gesehen habe ...
[/QUOTE]
Es ist kompliziert. Bei einer Promo (also alles in der if(LP<=100) muss man 3 oder 5 promospiele (wenn man im 1.Tier ist) spielen. Wenn man 2/3 Spiele gewinnt steigt man auf, deswegen TRank++;
 

temi

Top Contributor
Da du der einzige bist, der überhaupt versteht, worum es hier geht, mach einfach was dir vorgeschlagen wurde und baue ein paar Ausgaben dazwischen ein und versuche dem dadurch auf die Spur zu kommen.

Oder nutze den Debugger.
 

visar77

Mitglied
Zusammenfassung:
- Dieses Programm soll eine durschnittliche Anzahl an Spielen ausgeben, die man braucht um von einem Rank und Tier (TRank) zum anderen kommt (TRank2)
- Man fängt immer bei einer Anzahl von 0 LP. Danach wird durch Zufall bestimmt ob man gewinnt oder verliert. Wenn man gewinnt, gewinnt man LP. Wenn man verliert dann umgekehrt. Bis zu einer Anzahl von 100 LP
- Danach kommt man in die Promos (Promotion), wo man 3/5 (im 1.Tier) Promo-Spiele spielen muss. Gewinnt man 2/3 (im 1.Tier), dann steigt man mit dem Rank auf, deswegen TRank++;

Sorry, dass ich vergessen habe euch richtig zu informieren.
 
K

kneitzel

Gast
Also ich habe es mal mit Deinen Eingaben laufen lassen un es ist eine Endlosschleife, denn er erhöht TRank maximal nur 2 Mal.
1 Mal wenn PromoGamesWON == 2 und einmal wenn es == 3 ist.

Dadurch wird TRank niemals TRank2 so der Unterschied > 2 ist. (Bei deinen Werten waren die Werte 1 und 15 oder so ...)
 

M.L.

Top Contributor
In der Programmlogik stecken wohl noch mehr Ungereimtheiten (Eclipse, Java10, Variable markieren, Vorkommen visuell aufstöbern):
Java:
...int PromosWon = 0; ...(letzte Zeile)  System.out.println("Percentage of Promos won: "+(  ___PromosWon___  /y)*100+"%");
oder
Code:
  double y = AmountofSimulations*___10/10___;
. Wobei es zu diesen Ausgaben auf der Konsole aber gar nicht erst kommt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Switch Case Methode aufrufen Java Basics - Anfänger-Themen 3
U Warum kann ich die Methode in der ENUM Klasse nicht aufrufen? Und warum geht die Switch nicht? Java Basics - Anfänger-Themen 8
viisas Switch-Methode nicht berücksichtigt Java Basics - Anfänger-Themen 5
K Mehrere Werte in einem Switch Case parallel überprüfen Java Basics - Anfänger-Themen 23
_so_far_away_ Inventarisierungssystem brauche switch Cases und weiß nicht, wie ich e implementieren muss Java Basics - Anfänger-Themen 5
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
M error: '.class' expected switch(char) Java Basics - Anfänger-Themen 32
A switch statement Java Basics - Anfänger-Themen 4
volcanos enum und switch (neu): falschen Wert mit IllegalArgumentException oder mit EnumConstantNotPresentException abfangen ? Java Basics - Anfänger-Themen 51
X Enum Abfrage ohne if, for, while oder switch Java Basics - Anfänger-Themen 21
Lion.King switch-Befehl Java Basics - Anfänger-Themen 6
L Switch-Case Multiplikation wird nicht ausgegeben Java Basics - Anfänger-Themen 1
U Warum gibt das eine Nullpointerexception? (Switch) Java Basics - Anfänger-Themen 6
P9cman Vokal Zähler mit switch case und for-Schleife Java Basics - Anfänger-Themen 4
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
C if-Konstrukt durch switch-Konstrukt ersetzen Java Basics - Anfänger-Themen 14
1 Switch Case Java Basics - Anfänger-Themen 3
T Alternative für switch case Java Basics - Anfänger-Themen 1
C Taschenrechner (switch) in Taschenrechner mit Methoden umwandeln Java Basics - Anfänger-Themen 115
W Taschenrechner mit Switch case Java Basics - Anfänger-Themen 4
B Notensystem Switch-Case Java Basics - Anfänger-Themen 31
S Switch-Case zur Berechnung der Einkommensteuer Java Basics - Anfänger-Themen 15
F Switch case wird als char nicht erkannt.... Java Basics - Anfänger-Themen 6
H Frage zur if-Bedingung bzw switch case Java Basics - Anfänger-Themen 6
S switch case fängt beim letzten case an Java Basics - Anfänger-Themen 6
J Parameterübergabe in switch? Java Basics - Anfänger-Themen 2
M Switch Java Basics - Anfänger-Themen 2
F Switch Case Problem mit Regex lösen? Java Basics - Anfänger-Themen 6
W Wieso funktioniert mein Switch Case nicht ?! Java Basics - Anfänger-Themen 9
F Switch Case Modulo berechnen Java Basics - Anfänger-Themen 12
F Erste Schritte Frage zu simplem Taschenrechner(switch) Java Basics - Anfänger-Themen 16
NoMercy BitFlags Programm (switch on/off , swap und isSet) Java Basics - Anfänger-Themen 7
S Switch-Case für eine Array-Zuordnung Java Basics - Anfänger-Themen 5
S switch und case Java Basics - Anfänger-Themen 1
L Taschenrechner mit switch und while funktioniert noch nicht richtig Java Basics - Anfänger-Themen 22
B Problem bei switch statement Java Basics - Anfänger-Themen 4
D Klassen Problem bei switch-case? Java Basics - Anfänger-Themen 2
E Input/Output Switch ausgabe anpassen bzw. anders darstellen Java Basics - Anfänger-Themen 13
A Warum funktioniert switch aber nicht if/else? Java Basics - Anfänger-Themen 23
B Wiederholen einer if/switch-case Schleife Java Basics - Anfänger-Themen 9
X Nach switch case weiter mit Auswahl Java Basics - Anfänger-Themen 7
T switch case und continue Java Basics - Anfänger-Themen 5
D switch case Code Java Basics - Anfänger-Themen 3
K Erste Schritte switch - Warum sind long/float/double/... nicht erlaubt? Java Basics - Anfänger-Themen 5
Ponychan95 Erste Schritte Switch fällt immer bis zum default durch Java Basics - Anfänger-Themen 4
P Bei Switch-Anweisung wird default-Anweisung angezeigt Java Basics - Anfänger-Themen 4
D kleiner Taschenrechner mit switch fehlerhaft Java Basics - Anfänger-Themen 1
O This in switch anweisung Java Basics - Anfänger-Themen 5
V Fehlerhafte BufferedReader/switch Benutzung? Java Basics - Anfänger-Themen 2
F Erste Schritte Switch case vs. Verschachtelte If Anweisung Java Basics - Anfänger-Themen 11
K Variablen RETURN in Case-Switch / This method must return a result of type Item Java Basics - Anfänger-Themen 4
R Methoden Switch wählt das Falsche Java Basics - Anfänger-Themen 17
B Erste Schritte Addition von double in switch-Anweisung Java Basics - Anfänger-Themen 2
M Endlosschleife bricht durch switch ab Java Basics - Anfänger-Themen 17
R Switch: Nach durchlaufen des Case wieder zum Menü Java Basics - Anfänger-Themen 3
D Array in switch Java Basics - Anfänger-Themen 3
A Switch Case Java Basics - Anfänger-Themen 5
Devil0s if vs. switch Java Basics - Anfänger-Themen 27
F Reset in der switch Anweisung Java Basics - Anfänger-Themen 3
R Compiler-Fehler Auf selben Array in mehreren "cases" vom "Switch" zugreifen Java Basics - Anfänger-Themen 11
R Switch Werte außerhalb verwenden Java Basics - Anfänger-Themen 2
D Eine Variable in mehreren "switch" Java Basics - Anfänger-Themen 24
M Switch mit String Java Basics - Anfänger-Themen 20
T Erste Schritte switch case Anweisung und if else Verzweigungen? Java Basics - Anfänger-Themen 6
M Variablen Switch Bedingungen Java Basics - Anfänger-Themen 12
A ArrayList-iteration mit Prüfung auf instanceof durch switch case? Java Basics - Anfänger-Themen 13
P Switch Case - Fließkommazahl Java Basics - Anfänger-Themen 2
Z Switch umsetzung Java Basics - Anfänger-Themen 6
lulas[]args Fehlerhafte Switch Java Basics - Anfänger-Themen 6
lulas[]args Switch Schleife - orphaned case Java Basics - Anfänger-Themen 27
W "switch" Anweisung - Rechenzeichen? Java Basics - Anfänger-Themen 5
T kleines problem mit switch case Java Basics - Anfänger-Themen 11
I Methoden Wochenkalendar switch anweisung fehlt Java Basics - Anfänger-Themen 4
C Switch Anweisung Frage Java Basics - Anfänger-Themen 8
R Switch/Case frage: Java Basics - Anfänger-Themen 12
Luk10 Frage zu Switch-Anweisung Java Basics - Anfänger-Themen 11
C Erste Schritte switch Anweisung geht nicht Java Basics - Anfänger-Themen 3
R Switch Abfrage: Found boolean but expected int? Java Basics - Anfänger-Themen 7
T Umschreiben von switch in if else und umgekehrt Java Basics - Anfänger-Themen 9
K Input/Output switch case - Parameterübergabe args[0] Java Basics - Anfänger-Themen 34
P Compilerfehler bei switch-case Java Basics - Anfänger-Themen 18
R 3 Datumsangaben sortieren mittels Switch Java Basics - Anfänger-Themen 9
J Switch mit if anweisung kombinieren Java Basics - Anfänger-Themen 2
D Kann man eine for-Schleife mit switch kombinieren? Java Basics - Anfänger-Themen 8
D Switch und Case Java Basics - Anfänger-Themen 3
F Ps to kW Konvertierer switch-case Problem Java Basics - Anfänger-Themen 4
F Datentypen Ganz simpler Taschenrechner mit switch Java Basics - Anfänger-Themen 10
M '-1' in switch anweisung Java Basics - Anfänger-Themen 2
T Parser mit switch "Weg" ausgeben? Java Basics - Anfänger-Themen 5
Q switch case hier möglich Java Basics - Anfänger-Themen 10
A Switch-Case Problem Java Basics - Anfänger-Themen 17
A Do While mit Switch Case Java Basics - Anfänger-Themen 2
Luk10 switch - Problem Java Basics - Anfänger-Themen 9
S char im switch Java Basics - Anfänger-Themen 16
berti99 Switch-Case || Problem... Java Basics - Anfänger-Themen 6
R Switch-Case Selektion Java Basics - Anfänger-Themen 13
O Switch-Case - Case 4 erhöhen Java Basics - Anfänger-Themen 9
P Problem mit switch-Funktion Java Basics - Anfänger-Themen 5
K Ich verstehe switch einfach nicht Java Basics - Anfänger-Themen 4
M Frage zu Mehrfachauswahl mit switch ... case Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben