Java如何在每次while循环开始时获得一个随机数?

Java如何在每次while循环开始时获得一个随机数?,java,Java,这个密码应该在每次敌人死亡时产生一个新的敌人。这包括敌人随机产生一点生命值,但我的程序只使用与前一个敌人相同的生命值,因此不断循环到“敌人已被击败,”我曾试图让敌人的生命值和特定敌人在敌方.java中产生,但我正在努力掌握正确的OOP,尽管我已经使用了一些教程 import java.util.Random; import java.util.Scanner; import java.util.concurrent.ThreadLocalRandom; public class

这个密码应该在每次敌人死亡时产生一个新的敌人。这包括敌人随机产生一点生命值,但我的程序只使用与前一个敌人相同的生命值,因此不断循环到“敌人已被击败,”我曾试图让敌人的生命值和特定敌人在敌方.java中产生,但我正在努力掌握正确的OOP,尽管我已经使用了一些教程

  import java.util.Random;
  import java.util.Scanner;
  import java.util.concurrent.ThreadLocalRandom;


 public class Test {
 public static void main(String args[]) {

   Random rand = new Random();
   Scanner in = new Scanner(System.in);
   Scanner sc = new Scanner(System.in);


   boolean running = true;
   int hitPoints;
   int choice;
   String name;

  Vehicle Vehicle = new Vehicle();
  Player Player = new Player();
  Enemy Enemy = new Enemy();

  Player.name();
  Vehicle.number();
  Player.hitPoints();

  name = Player.name;
  int enemyHealth;

  GAME:
  while(running){

         String [] enemies = {"Skeleton", "Zombie", "Warrior", "Assassin", "Reaper", "Archer"};
         String enemy = enemies[rand.nextInt(enemies.length)];
         enemyHealth =  Player.enemyHealth;
         System.out.println("\n*# " + enemy + " appeared! #*");

         hitPoints = Player.hitPoints;

    while(enemyHealth > 0){

        enemyHealth =  Player.enemyHealth;
        if(enemyHealth < 1){
            break;
        }

        if(hitPoints < 1){
            System.out.println("\nYour car has been destroyed");
        break;
        }


      hitPoints = Player.hitPoints;

    System.out.println("\nYour car has " + hitPoints + " health ");
    System.out.println("Enemy car has " + enemyHealth + " health ");

    System.out.println("\n1. Bump enemy car");
    System.out.println("2. Heal your car");
    System.out.println("3. Avoid enemy car");
    int userChoice = in.nextInt();

    switch(userChoice){
    case 1:
        Player.attack();
        break;
    case 2:

    case 3:
        System.out.println("You barely avoided the enemy car");
        break;

}
}
if(hitPoints < 1){
    System.out.println("\nGame Over");
    break;
}
if(enemyHealth < 1){

hitPoints = Player.hitPoints;
  name = Player.name;
System.out.println(" \nEnd Fight Result: \n");
System.out.println(" # " + enemy + " was defeated! #");
System.out.println(" # You have " + hitPoints + " HP left. #");

System.out.println("\nWhat would you like to do " + name + " ?");
System.out.println("1. Continue Fighting");
System.out.println("2. Exit Dungeon");

choice = in.nextInt();

switch(choice){
    case 1:
        System.out.println("\nYou continue your adventure!");
        break;
    case 2:
        System.out.println("You exit the dungeon, succesful from your         adventures!");
        break;  
}
if(choice == 2){
    break;
}
}
  }
  name = Player.name;
  System.out.println("\n##########################");
    System.out.println("# Thanks for playing " + name + "! #");
    System.out.println("##########################");
}
}

 import java.util.Scanner;
 import java.util.Random;

 public class Player {

 Enemy Enemy = new Enemy();

Scanner in = new Scanner(System.in);
Scanner sc = new Scanner(System.in);
Random rand = new Random();
String name;
int hitPoints;
int enemyDamageDealt = Enemy.enemyDamageDealt;
int enemyHealth = Enemy.enemyHealth;
int damageDealt;

public void name(){

System.out.println("Enter your username");
this.name = sc.nextLine();
System.out.println("You set your username to: " + name);     

}

 public void hitPoints(){
 hitPoints = rand.nextInt(500) + 500;
}

public void attack(){

damageDealt = rand.nextInt(100);
enemyHealth -= damageDealt;
hitPoints -= enemyDamageDealt;
System.out.println("You damaged the enemy car for " + damageDealt);
System.out.println("In return you got damaged for " + enemyDamageDealt);
}
}


 import java.util.Random;
 import java.util.Scanner;

public class Enemy {

Scanner in = new Scanner(System.in);
Scanner sc = new Scanner(System.in);
Random rand = new Random();

 int enemyDamageDealt = rand.nextInt(100);

 public String [] enemies = {"Skeleton", "Zombie", "Warrior", "Assassin",   "Reaper", "Archer"};
 public String enemy = enemies[rand.nextInt(enemies.length)];



 int enemyHealth =  rand.nextInt(500) + 250;

 }
import java.util.Random;
导入java.util.Scanner;
导入java.util.concurrent.ThreadLocalRandom;
公开课考试{
公共静态void main(字符串参数[]){
Random rand=新的Random();
扫描仪输入=新扫描仪(系统输入);
扫描仪sc=新的扫描仪(System.in);
布尔运行=真;
int生命点;
智力选择;
字符串名;
车辆=新车();
玩家=新玩家();
敌人=新敌人();
Player.name();
车辆编号();
Player.hitPoints();
name=Player.name;
国际灌肠卫生;
游戏:
(跑步时){
String[]敌人={“骷髅”、“僵尸”、“战士”、“刺客”、“收割者”、“弓箭手”};
字符串敌人=敌人[rand.nextInt(敌人.长度)];
enemyHealth=Player.enemyHealth;
System.out.println(“\n*#”+敌人+”出现!#*”;
生命值=玩家。生命值;
而(enemyHealth>0){
enemyHealth=Player.enemyHealth;
如果(enemyHealth<1){
打破
}
如果(生命值<1){
System.out.println(“\n您的汽车已被毁”);
打破
}
生命值=玩家。生命值;
System.out.println(“\n您的车有”+生命值+”健康“);
System.out.println(“敌方汽车拥有”+敌方健康+“健康”);
System.out.println(“\n1.碰撞敌车”);
System.out.println(“2.治愈你的汽车”);
系统输出打印(“3.避开敌车”);
int userChoice=in.nextInt();
开关(用户选择){
案例1:
Player.attack();
打破
案例2:
案例3:
System.out.println(“你几乎没有躲过敌人的车”);
打破
}
}
如果(生命值<1){
System.out.println(“\n名称结束”);
打破
}
如果(enemyHealth<1){
生命值=玩家。生命值;
name=Player.name;
System.out.println(“\n和战斗结果:\n”);
System.out.println(“#“+敌人+”被击败!#”);
System.out.println(“#您有”+生命值+”剩余生命。#”;
System.out.println(“\n您想做什么”+name+“?”);
系统输出打印(“1.继续战斗”);
System.out.println(“2.退出地牢”);
choice=in.nextInt();
开关(选择){
案例1:
System.out.println(“\n您继续您的冒险!”);
打破
案例2:
System.out.println(“你离开了地牢,成功地完成了你的冒险!”);
打破
}
如果(选项==2){
打破
}
}
}
name=Player.name;
系统.out.println(“\n######################”;
System.out.println(“#感谢您播放“+name+”!#”);
系统、输出、打印(“\35;;
}
}
导入java.util.Scanner;
导入java.util.Random;
公开课选手{
敌人=新敌人();
扫描仪输入=新扫描仪(系统输入);
扫描仪sc=新的扫描仪(System.in);
Random rand=新的Random();
字符串名;
int生命点;
int EnemyDamageDealed=敌人。EnemyDamageDealed;
int-enemyHealth=敌人。enemyHealth;
造成伤害;
公共无效名称(){
System.out.println(“输入您的用户名”);
this.name=sc.nextLine();
System.out.println(“您将用户名设置为:“+name”);
}
公共无效生命值(){
生命值=兰特·耐克斯汀(500)+500;
}
公开无效攻击(){
损坏处理=兰特下一次(100);
enemyHealth-=造成的损害;
生命值-=已处理的敌人伤害;
System.out.println(“你因“+伤害处理”而损坏了敌人的汽车);
System.out.println(“作为回报,您因“+EnemyDamageDealed”而受到损害);
}
}
导入java.util.Random;
导入java.util.Scanner;
公敌{
扫描仪输入=新扫描仪(系统输入);
扫描仪sc=新的扫描仪(System.in);
Random rand=新的Random();
int EnemyDamageDealed=rand.nextInt(100);
公共字符串[]敌人={“骷髅”、“僵尸”、“战士”、“刺客”、“收割者”、“弓箭手”};
公共字符串敌人=敌人[rand.nextInt(敌人.length)];
int enemyHealth=rand.nextInt(500)+250;
}

好的,你的代码有点难理解。但我相信我发现了你的问题

你正在设置

enemyHealth =  Player.enemyHealth;
如果我读对了,那么Player类中的enemyHealth实际上设置为

int enemyHealth = Enemy.enemyHealth;
哪个。。。敌人是一个只创建一次的对象,因此它在敌人类中设置
enemyHealth
,就是这样

int enemyHealth =  rand.nextInt(500) + 250;
代码的设计没有“简单”的修正。下面是我看到的代码问题列表

  • 你的玩家职业不应该记录敌人的生命值。如果您想添加多个敌人或更改敌人的功能,该怎么办?如果您的玩家类正在跟踪与玩家没有直接关系的事情,那么这将非常困难
  • 声明对象时,请停止执行
    Player=new Player()
    ,并正确命名对象,如
    Player=new Player()
    。对象应以小写字母开头
  • 攻击
    方法不应在玩家类中
  • 您似乎正在创建两个敌人实例(一个在主类中,一个在玩家类中),而您只使用玩家类中的一个
  • 您应该创建一个新的敌人对象,并在每次创建新敌人时使用其属性 综上所述,我相信最简单的代码修复方法可能是这样,尽管我建议进行上述更改,而不是这样。因为这不是好代码。

    在您的
    while(running)
    下设置您的enemyHealth,将其替换为以下两行

    enemyHealth =  rand.nextInt(500) + 250;
    Player.enemyHealth = enemyHealth;
    

    好的,你的代码有点难
            enemyHealth = rand.nextInt(500) + 250;
            Player.enemyHealth = enemyHealth;
    
    import java.util.Random;
    import java.util.Scanner;
    
    public class Main {
        public static void main(String args[]) {
    
            Random rand = new Random();
            Scanner in = new Scanner(System.in);
            Scanner sc = new Scanner(System.in);
    
    
            boolean running = true;
            int hitPoints;
            int choice;
            String name;
    
            // Vehicle Vehicle = new Vehicle();
            Player Player = new Player();
            Enemy Enemy = new Enemy();
    
            Player.name();
            //   Vehicle.number();
            Player.hitPoints();
    
            name = Player.name;
            int enemyHealth;
    
            GAME:
            while (running) {
    
                String[] enemies = {"Skeleton", "Zombie", "Warrior", "Assassin", "Reaper", "Archer"};
                String enemy = enemies[rand.nextInt(enemies.length)];
                enemyHealth = rand.nextInt(500) + 250;
                Player.enemyHealth = enemyHealth;
                System.out.println("\n*# " + enemy + " appeared! #*");
    
                hitPoints = Player.hitPoints;
    
                while (enemyHealth > 0) {
    
                    enemyHealth = Player.enemyHealth;
                    if (enemyHealth < 1) {
                        break;
                    }
    
                    if (hitPoints < 1) {
                        System.out.println("\nYour car has been destroyed");
                        break;
                    }
    
    
                    hitPoints = Player.hitPoints;
    
                    System.out.println("\nYour car has " + hitPoints + " health ");
                    System.out.println("Enemy car has " + enemyHealth + " health ");
    
                    System.out.println("\n1. Bump enemy car");
                    System.out.println("2. Heal your car");
                    System.out.println("3. Avoid enemy car");
                    int userChoice = in.nextInt();
    
                    switch (userChoice) {
                        case 1:
                            Player.attack();
                            break;
                        case 2:
    
                        case 3:
                            System.out.println("You barely avoided the enemy car");
                            break;
    
                    }
                }
                if (hitPoints < 1) {
                    System.out.println("\nGame Over");
                    break;
                }
                if (enemyHealth < 1) {
    
                    hitPoints = Player.hitPoints;
                    name = Player.name;
                    System.out.println(" \nEnd Fight Result: \n");
                    System.out.println(" # " + enemy + " was defeated! #");
                    System.out.println(" # You have " + hitPoints + " HP left. #");
    
                    System.out.println("\nWhat would you like to do " + name + " ?");
                    System.out.println("1. Continue Fighting");
                    System.out.println("2. Exit Dungeon");
    
                    choice = in.nextInt();
    
                    switch (choice) {
                        case 1:
                            System.out.println("\nYou continue your adventure!");
                            break;
                        case 2:
                            System.out.println("You exit the dungeon, succesful from your         adventures!");
                            break;
                    }
                    if (choice == 2) {
                        break;
                    }
                }
            }
            name = Player.name;
            System.out.println("\n##########################");
            System.out.println("# Thanks for playing " + name + "! #");
            System.out.println("##########################");
        }
    }
    
    
    class Player {
    
        Enemy Enemy = new Enemy();
    
        Scanner in = new Scanner(System.in);
        Scanner sc = new Scanner(System.in);
        Random rand = new Random();
        String name;
        int hitPoints;
        int enemyDamageDealt = Enemy.enemyDamageDealt;
        int enemyHealth = Enemy.enemyHealth;
        int damageDealt;
    
        public void name() {
    
            System.out.println("Enter your username");
            this.name = sc.nextLine();
            System.out.println("You set your username to: " + name);
    
        }
    
        public void hitPoints() {
            hitPoints = rand.nextInt(500) + 5000;
        }
    
        public void attack() {
    
            damageDealt = rand.nextInt(100);
            enemyHealth -= damageDealt;
            hitPoints -= enemyDamageDealt;
            System.out.println("You damaged the enemy car for " + damageDealt);
            System.out.println("In return you got damaged for " + enemyDamageDealt);
        }
    }
    
    
    class Enemy {
    
        Scanner in = new Scanner(System.in);
        Scanner sc = new Scanner(System.in);
        Random rand = new Random();
    
        int enemyDamageDealt = rand.nextInt(100);
    
        public String[] enemies = {"Skeleton", "Zombie", "Warrior", "Assassin", "Reaper", "Archer"};
        public String enemy = enemies[rand.nextInt(enemies.length)];
    
    
        int enemyHealth = rand.nextInt(500) + 250;
    
    }
    
    Enter your username
    foo
    You set your username to: foo
    
    *# Reaper appeared! #*
    
    Your car has 5496 health 
    Enemy car has 368 health 
    
    1. Bump enemy car
    2. Heal your car
    3. Avoid enemy car
    1
    You damaged the enemy car for 36
    In return you got damaged for 39
    
    Your car has 5457 health 
    Enemy car has 332 health 
    
    1. Bump enemy car
    2. Heal your car
    3. Avoid enemy car
    1
    You damaged the enemy car for 61
    In return you got damaged for 39
    
    Your car has 5418 health 
    Enemy car has 271 health 
    
    1. Bump enemy car
    2. Heal your car
    3. Avoid enemy car
    1
    You damaged the enemy car for 42
    In return you got damaged for 39
    
    Your car has 5379 health 
    Enemy car has 229 health 
    
    1. Bump enemy car
    2. Heal your car
    3. Avoid enemy car
    1
    You damaged the enemy car for 2
    In return you got damaged for 39
    
    Your car has 5340 health 
    Enemy car has 227 health 
    
    1. Bump enemy car
    2. Heal your car
    3. Avoid enemy car
    1
    You damaged the enemy car for 69
    In return you got damaged for 39
    
    Your car has 5301 health 
    Enemy car has 158 health 
    
    1. Bump enemy car
    2. Heal your car
    3. Avoid enemy car
    1
    You damaged the enemy car for 45
    In return you got damaged for 39
    
    Your car has 5262 health 
    Enemy car has 113 health 
    
    1. Bump enemy car
    2. Heal your car
    3. Avoid enemy car
    1
    You damaged the enemy car for 23
    In return you got damaged for 39
    
    Your car has 5223 health 
    Enemy car has 90 health 
    
    1. Bump enemy car
    2. Heal your car
    3. Avoid enemy car
    1
    You damaged the enemy car for 81
    In return you got damaged for 39
    
    Your car has 5184 health 
    Enemy car has 9 health 
    
    1. Bump enemy car
    2. Heal your car
    3. Avoid enemy car
    1
    You damaged the enemy car for 16
    In return you got damaged for 39
    
    End Fight Result: 
    
     # Reaper was defeated! #
     # You have 5145 HP left. #
    
    What would you like to do foo ?
    1. Continue Fighting
    2. Exit Dungeon
    1
    
    You continue your adventure!
    
    *# Skeleton appeared! #*
    
    Your car has 5145 health 
    Enemy car has 284 health 
    
    1. Bump enemy car
    2. Heal your car
    3. Avoid enemy car
    1
    You damaged the enemy car for 21
    In return you got damaged for 39
    
    Your car has 5106 health 
    Enemy car has 263 health 
    
    1. Bump enemy car
    2. Heal your car
    3. Avoid enemy car
    1
    You damaged the enemy car for 39
    In return you got damaged for 39
    
    Your car has 5067 health 
    Enemy car has 224 health 
    
    1. Bump enemy car
    2. Heal your car
    3. Avoid enemy car
    1
    You damaged the enemy car for 65
    In return you got damaged for 39
    
    Your car has 5028 health 
    Enemy car has 159 health 
    
    1. Bump enemy car
    2. Heal your car
    3. Avoid enemy car
    1
    You damaged the enemy car for 76
    In return you got damaged for 39
    
    Your car has 4989 health 
    Enemy car has 83 health 
    
    1. Bump enemy car
    2. Heal your car
    3. Avoid enemy car
    1
    You damaged the enemy car for 66
    In return you got damaged for 39
    
    Your car has 4950 health 
    Enemy car has 17 health 
    
    1. Bump enemy car
    2. Heal your car
    3. Avoid enemy car
    1
    You damaged the enemy car for 87
    In return you got damaged for 39
    
    End Fight Result: 
    
     # Skeleton was defeated! #
     # You have 4911 HP left. #
    
    What would you like to do foo ?
    1. Continue Fighting
    2. Exit Dungeon
    1
    
    You continue your adventure!
    
    *# Archer appeared! #*
    
    Your car has 4911 health 
    Enemy car has 701 health 
    
    1. Bump enemy car
    2. Heal your car
    3. Avoid enemy car