You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java while循环中每次迭代生成随机伤害值的问题求助

解决格斗游戏每次攻击伤害固定的问题

你的问题根源很明确:随机伤害值只在程序初始化时生成了一次,之后所有攻击都复用这个固定值。要实现每次攻击都有不同的随机伤害,只需要把随机数生成的逻辑移到每次攻击的流程里就行。另外,代码里重复创建Scanner和Random对象的做法也可以优化,复用实例更高效。

修改后的完整代码

package jeu_propre;

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

public class main {
    public static void main(String[] args){
        // 只创建一次Scanner和Random实例,复用更高效
        Scanner scanner = new Scanner(System.in);
        Random random = new Random();
        
        System.out.println("Player 1, choose your name : ");
        String nom_pone = scanner.nextLine();
        System.out.println("Player 2, choose your name : ");
        String nom_ptwo = scanner.nextLine();
                        
        weapons fists = new weapons();
        fists.name = "fists";
        
        player number_one = new player();
        number_one.name = nom_pone;
        number_one.hp = 100;
        
        player number_two = new player();
        number_two.name = nom_ptwo;
        number_two.hp = 100;
        
        boolean running = true;
        while (running) {
            // 玩家1攻击:每次攻击前生成新的随机伤害
            System.out.println("Fight !");
            System.out.println(number_one.name +" hit " + number_two.name);
            scanner.nextLine(); // 等待玩家输入确认攻击
            int currentDamage = random.nextInt(30); // 每次攻击生成0-29的随机伤害
            System.out.println("Damage: " + currentDamage);
            number_two.hp -= currentDamage;
            
            if (number_two.hp <= 0) {
                System.out.println(number_one.name +" wins !");
                running = false;
                break;
            } else {
                System.out.println(number_two.name + " still has "+ number_two.hp);
            }
            
            // 玩家2攻击:同样每次生成新的随机伤害
            System.out.println("Fight !");
            System.out.println(number_two.name +" hit " + number_one.name);
            scanner.nextLine();
            currentDamage = random.nextInt(30);
            System.out.println("Damage: " + currentDamage);
            number_one.hp -= currentDamage;
            
            if (number_one.hp <= 0) {
                System.out.println(number_two.name +" wins !");
                running = false;
                break;
            } else {
                System.out.println(number_one.name + " still has "+ number_one.hp);
            }
        }
        scanner.close(); // 最后关闭Scanner
    }
}

// 补充你代码里用到的类(确保编译通过)
class weapons {
    String name;
    int damage;
}

class player {
    String name;
    int hp;
}

关键改动说明

  • 复用Scanner和Random实例:避免每次输入或生成随机数都创建新对象,提升性能。
  • 把随机伤害生成移到攻击流程内:每次玩家攻击时,调用random.nextInt(30)生成新的0-29的随机数(如果需要包含30,改成nextInt(31)),作为本次攻击的伤害值。
  • 移除固定的fists.damage赋值:不再提前给武器设置固定伤害,而是每次攻击动态生成。
  • 优化扣血代码:number_two.hp -= currentDamage比number_two.hp= number_two.hp -= fists.damage写法更简洁规范。

内容的提问来源于stack exchange,提问作者wdwad dwad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:46:01