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

Java开发猜价格游戏时Random生成随机数超出预期范围问题排查

问题原因
  1. 错误使用Random构造函数参数:new Random(200)中的200是随机数种子,不是生成随机数的上限值。无参的nextInt()方法会返回整个int取值范围内的任意整数(范围是-231到231-1),所以会出现超出预期的负数或者极大值。
  2. 重复调用nextInt()生成新随机数:代码中每次判断、每次输出时都调用了一次var2.nextInt(),每次调用都会生成全新的随机数,导致判断用的数值和最终输出的数值完全不匹配,逻辑错误。
  3. 额外问题:固定随机种子会导致每次运行程序生成的随机数序列完全相同,游戏失去随机意义。
修复方案
  • 生成指定范围的随机数:如果需要生成0~199区间的随机数,调用带参的nextInt(上限值)方法,该方法返回[0, 上限值)区间的正整数;如果需要1~200区间的价格,写成nextInt(200) + 1即可。
  • 提前将生成的随机数存入变量,全程复用同一个数值做判断和输出。
  • 取消Random构造函数的固定种子,使用无参构造new Random(),会自动以系统时间作为种子,保证每次运行生成的随机数都不同。
  • 可选优化:类名遵循Java帕斯卡命名规范,首字母大写。
修正后完整代码
import java.util.Random;
import java.util.Scanner;

// 类名首字母大写符合Java编码规范
public class PriceRight {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你猜的价格:");
        int userGuess = scanner.nextInt();
        
        // 无参构造生成随机种子,每次运行生成的数值都不同
        Random random = new Random();
        // 生成1~200之间的随机价格,提前存入变量复用
        int rightPrice = random.nextInt(200) + 1;
        
        if (userGuess < rightPrice) {
            System.out.println("猜小了!正确答案是:" + rightPrice);
        } else if (userGuess > rightPrice) {
            System.out.println("猜大了!正确答案是:" + rightPrice);
        } else {
            System.out.println("恭喜你猜对了!");
        }
        scanner.close();
    }
}

内容的提问来源于stack exchange,提问作者Quentin Ramecourt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:51:02