Java switch语句循环中排除的数据计算

Java switch语句循环中排除的数据计算,java,while-loop,switch-statement,nested-loops,Java,While Loop,Switch Statement,Nested Loops,我的期末专题是一个基于文本的游戏。到目前为止,除了1到2个问题外,我都能按照我的意愿工作。第一个大问题是,当我进入“魔术”菜单(switch语句循环)时,所有数据都不会产生任何影响。这意味着如果用户的HP降至0以下,他们不会死亡,直到您退出循环才会发生。我弄糟了它,使它工作,但它破坏了代码的其他部分,所以请帮助,如果你可以 我能做的另一个解决方案是在每个案例之后将布尔值设置为false,让用户输入一个案例,然后它跳出开关,这非常有效,除了它执行整个开关循环,这意味着每一个输入。 这是主代码,请记

我的期末专题是一个基于文本的游戏。到目前为止,除了1到2个问题外,我都能按照我的意愿工作。第一个大问题是,当我进入“魔术”菜单(switch语句循环)时,所有数据都不会产生任何影响。这意味着如果用户的HP降至0以下,他们不会死亡,直到您退出循环才会发生。我弄糟了它,使它工作,但它破坏了代码的其他部分,所以请帮助,如果你可以

我能做的另一个解决方案是在每个案例之后将布尔值设置为false,让用户输入一个案例,然后它跳出开关,这非常有效,除了它执行整个开关循环,这意味着每一个输入。 这是主代码,请记住它还有另一个类

package textRPG;
import java.util.Random;
import java.util.Scanner;

public class LoopyLoop {

    private static int maxEnemyHealth = 155;
    private static int enemyAttackDmg = 25;
    private static int health = 109;
    private static int attackDmg = 30;
    private static int mana = 15;
    private static int numHealthPots = 3;
    private static int healthPotionHealAmount = 30;
    private static int healthPotionDropChance = 20;
    private static int manaPotionRecoveryAmount = 12;
    private static int count = 0;
    private static int count2 = 0;
    private static int expUp = 0;
    private static int level = 1;   

    public static void main(String[] args) {

        SpellsAndAbilities spells = new SpellsAndAbilities();
        Scanner in = new Scanner(System.in);
        Random rand = new Random();
        //String Array for enemies, more can be added, or taken away
        String[] enemies = {"Skeleton", "Zombie", "Goblin", "Tiny Dragon", "Ben Afleck", "Little weird man", "Huge Bee", "Jeff", "Crazy Ray"};          
        //Set a variable running to true, to allow the program to run, so that if the user chooses to end the game early, they can do so
        boolean running = true;
        System.out.println("==================================================================");
        System.out.println("Welcome to Mysterical World of Mysterical Things!");
        System.out.println("Please press the number corresponding the action you wish to take.");   
        System.out.println("==================================================================");
        //Clause to keep the game running with invalid inputs
        GAME:           
        while(running) {

            int enemyHealth = rand.nextInt(maxEnemyHealth);
            String enemy = enemies[rand.nextInt(enemies.length)];
            System.out.println("\n\t### " + enemy + " has appeared! ###\n");

            while (enemyHealth > 0) {
                 System.out.println("\tYour HP: " + health);
                 System.out.println("\tYour Mana: " + mana);
                 System.out.println("\t" + enemy + "'s HP: " + enemyHealth);
                 System.out.println("\n\tWhat would you like to do?");
                 System.out.println("\t1. Attack");
                 System.out.println("\t2. Spells");
                 System.out.println("\t3. Use potion");
                 System.out.println("\t4. Run");
                 String input = in.nextLine();

                if (input.equals("1")) {
                    int damageDealt = rand.nextInt(attackDmg);
                    int damageTaken = rand.nextInt(enemyAttackDmg);
                    enemyHealth -= damageDealt;
                    health -= damageTaken;
                    System.out.println("\t>>> You hit the " + enemy + " for " + damageDealt + " damage <<<");
                    System.out.println("\t>>> The " + enemy + " hit you for " + damageTaken + " damage <<<");
                    System.out.println();
                    if(health < 1) {
                        System.out.println("\t=== You died! ===");
                        break;
                    }
                    //
                    //Problem Starts Here
                    //
                }else if (input.equals("2")) {
                    boolean set=true;
                    while(set) {                        
                        System.out.println("____________________________________________\n");
                        System.out.println("1. Fireblast (Cost: 6 mana, Damage: 10-19)");                   
                        System.out.println("2. Ice Sickle (Cost: 9 mana, Damage: 22-26)");                      
                        System.out.println("3. Whirlwind (Cost: 14 mana, Damage: 31-36)");                      
                        System.out.println("4. Earth shard (Cost: 28 mana, Damage: 38-42)");                        
                        System.out.println("5. Heal (Cost: 50 mana, Heals: 35 to 55 HP)");                      
                        System.out.println("6. Exit this menu");
                        System.out.println("____________________________________________");
                        int spellInput = in.nextInt();

                        switch (spellInput) {

                        case 1: if(mana >= 6) {
                            mana -= 6;
                            int damageDealt = spells.fireBlast();
                            int damageTaken = rand.nextInt(enemyAttackDmg);
                            enemyHealth -= damageDealt;
                            health -= damageTaken;                                                  
                            System.out.println("\t====================");
                            System.out.println("\tYou cast Fire Blast!");
                            System.out.println("\t====================");
                            System.out.println("\n\t>>> Fireblast hits the " + enemy + " for " + damageDealt + " damage <<<"); 
                            System.out.println("\t>>> You took " + damageTaken+ " damage<<<"); 
                            System.out.println();                   
                            break;
                            }
                            else {
                            break;
                            }                                                       

                        case 2: if (mana >= 9) {
                            mana -= 9;
                            int damageDealt = spells.iceSickle();
                            int damageTaken = rand.nextInt(enemyAttackDmg);
                            enemyHealth -= damageDealt;
                            health -= damageTaken;                              
                            System.out.println("\t====================");
                            System.out.println("\tYou cast Ice Sickle!");
                            System.out.println("\t====================");
                            System.out.println("\n\t>>> Ice Sickle slashes the " + enemy + " for " + damageDealt + " damage <<<"); 
                            System.out.println("\t>>> You took " + damageTaken+ " <<<"); 
                            System.out.println();
                            break;
                        }
                        else {
                            System.out.println("You need more mana");
                            break;                                       
                        }   

                        case 3: if(mana >= 14) {
                            mana -= 14;     
                            int damageDealt = spells.whirlWind();
                            int damageTaken = rand.nextInt(enemyAttackDmg);
                            enemyHealth -= damageDealt;
                            health -= damageTaken;                      
                            System.out.println("\t====================");
                            System.out.println("\tYou cast Whirlwind!");
                            System.out.println("\t====================");
                            System.out.println("\n\t>>> Whirlwind ravages " + enemy + " for " + damageDealt + " damage <<<"); 
                            System.out.println("\t>>> You took " + damageTaken+ " <<<"); 
                            System.out.println();
                            break;
                        }
                        else {
                            break;
                        }


                        case 4: if(mana >= 28) {
                            mana -= 28; 
                            int damageDealt = spells.earthShard();
                            int damageTaken = rand.nextInt(enemyAttackDmg);
                            enemyHealth -= damageDealt;
                            health -= damageTaken;                      
                            System.out.println("\t====================");
                            System.out.println("\tYou cast Earth Shard!");
                            System.out.println("\t====================");
                            System.out.println("\n\t>>> Earth shard pummels " + enemy + " for " + damageDealt + " damage <<<"); 
                            System.out.println("\t>>> You took " + damageTaken+ " <<<"); 
                            System.out.println();
                            break;
                        }
                        else {
                            break;
                        }


                        case 5: if(mana >= 50) {
                            mana -= 50;                             
                            health += spells.Heal();
                            int damageTaken = rand.nextInt(enemyAttackDmg);                                 
                            health -= damageTaken;              
                            System.out.println("\t===============");
                            System.out.println("\tYou cast Heal!");
                            System.out.println("\t===============");
                            System.out.println("\n\t>>> You recover " + spells.Heal() + " HP <<<"); 
                            System.out.println("\t>>> You took " + damageTaken+ " damage <<<");
                            System.out.println("\tYour HP: " + health);
                            System.out.println("\tYour Mana: " + mana);
                            System.out.println();
                            break;
                        }
                        else {
                            break;;
                        }


                        case 6: set = false;

                        default: break;                 
                        }
                    }
                }

                else if (input.equals("3")) {   

                        if (numHealthPots > 0) {
                            count2++;
                            health += healthPotionHealAmount;
                            mana += manaPotionRecoveryAmount;
                            numHealthPots--;
                            System.out.println("\tYou drink a potion, healing for " + healthPotionHealAmount + " HP and recovering " + manaPotionRecoveryAmount + " mana" +
                                               "\n\t>> You now have " + health + " HP and " + mana +" Mana <<" +
                                               "\n\t>> You have " + numHealthPots + " potions left <<");
                        }

                        else {
                            System.out.println("\tYou have no potions left! Defeat enemies for a chance to get one!");
                        }

                } else if (input.equals("4")) {             
                            System.out.println("\tYou run away from the " + enemy + "!");
                    continue GAME;
                  }

                  else {                        
                        System.out.println("-------------------------------------");
                  }
            }

            if(health < 1) {
                System.out.println("You pitifully limp out of the dungeon, too weak to go on!");
                break;
            }
                count++;
                System.out.println("=========================================");
                System.out.println(" *** " + enemy +" was defeated! ***");
                System.out.println("### You have " + health + " HP ### \n### And " + mana + " mana ###");
                expUp += expUp + 25;            

            if (rand.nextInt(100) < healthPotionDropChance) {

                numHealthPots++;
                System.out.println(" # The " + enemy + " dropped a health potion");
                System.out.println(" # You now have " + numHealthPots + " health potion(s) # ");
            } 
                if(expUp > 99) {
                    level++;
                    health = health+22;
                    attackDmg = attackDmg + 2;
                    mana = mana + 7;
                    System.out.println("****** LEVEL UP!!! ******");
                    System.out.println("You are now level " + level + "!");
                    System.out.println("Each level up rewards 22 to total health, +2 to attack, and +7 to mana!");
                }
                System.out.println("=========================================");
                System.out.println("What would you like to do now?");
                System.out.println("Press 1 to continue fighting");
                System.out.println("Pess 2 to exit");

            String input = in.nextLine();

            while (!input.equals("1") && !input.equals("2")) {
                System.out.println("Invalid command");
                input = in.nextLine();
            }
            if (input.equals("1")) {
                System.out.println("You choose to continue, good luck!");
            }
            else if (input.equals("2")) {
                System.out.println("You exit the game");
                break;
            }
        }
                System.out.println("####################");
                System.out.println("Thanks for playing!");
                System.out.println("####################");
                System.out.println("Press 5 to see your score!");
                String input2 = in.nextLine();
                if (input2.equals("5")){
                    System.out.println("You defeated " + count + " enemies");
                    System.out.println("Max level achieved: " + level);
                    System.out.println("And you used " + count2 + " potions");                  
                }
                    else {
                        System.out.println("Invalid input");
                        input2 = in.nextLine();
                    }
                in.close();
        }
}

案例1和案例2在else子句中没有break语句,如果您不以
break结束案例当前案例下的案例也将被执行,如果该案例没有break语句,那么该案例下的案例也将被执行,因此我无法强烈建议您将代码重构为离散方法。我为混乱感到抱歉,这真的很糟糕,没有任何借口。我应该写一些方法来执行这一切,所以我真诚地为寻求帮助而道歉,
6. Exit this menu
____________________________________________
6
=========================================
 *** Tiny Dragon was defeated! ***
### You have 136 HP ### 
### And 6 mana ###
****** LEVEL UP!!! ******