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

求助:生成含1-55无重复随机值的Java五元素数组

解决生成不重复随机数数组的问题

我来帮你搞定这个问题!先看看你代码里的几个关键问题,然后给你两种可行的解决方案:

你的代码存在的问题

  • 语法未完成:while (v[y... 这部分没有写完,直接导致代码无法编译运行。
  • 重复检查逻辑错误:内层循环的范围y < c不合理,c是你用来计数的变量,但当你给v[i]赋值时,前面只有0到i-1的元素是已经生成的,应该检查这些元素而不是到c,否则会出现数组越界(比如i=0时c=1,y会循环到1,但v[1]还没初始化)。
  • 随机数范围错误:x.nextInt(56)生成的是0到55的数,而你需要的是1到55,得调整为x.nextInt(55) + 1。
  • 多余的c变量:这个变量不仅没用,还会导致逻辑混乱,完全可以去掉。

方案一:手动检查重复(修正你的原逻辑)

这种方式适合理解基础的数组操作逻辑,核心是生成随机数后,检查是否和已有的元素重复,重复就重新生成:

import java.util.Random;

public class RandomArray {
    public static void main(String args[]) {
        Random random = new Random(System.nanoTime());
        int[] arr = new int[5];
        
        for (int i = 0; i < arr.length; i++) {
            int num;
            boolean isDuplicate;
            // 循环生成直到得到不重复的数
            do {
                // 生成1-55的随机数
                num = random.nextInt(55) + 1;
                isDuplicate = false;
                // 检查当前数是否和已生成的元素重复
                for (int j = 0; j < i; j++) {
                    if (arr[j] == num) {
                        isDuplicate = true;
                        break;
                    }
                }
            } while (isDuplicate);
            
            arr[i] = num;
        }
        
        // 输出结果
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
}

方案二:用集合自动去重(更简洁高效)

利用Set集合天然不允许重复元素的特性,代码会更简洁,也不用手动写重复检查逻辑:

import java.util.Random;
import java.util.LinkedHashSet;
import java.util.Set;

public class RandomArray {
    public static void main(String args[]) {
        Random random = new Random(System.nanoTime());
        // LinkedHashSet可以保持插入顺序
        Set<Integer> uniqueNums = new LinkedHashSet<>();
        
        // 直到集合里有5个不重复的元素
        while (uniqueNums.size() < 5) {
            int num = random.nextInt(55) + 1;
            uniqueNums.add(num); // 重复元素会被自动忽略
        }
        
        // 把集合转成int数组
        int[] arr = uniqueNums.stream().mapToInt(Integer::intValue).toArray();
        
        // 输出结果
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
}

这两种方案都能生成你需要的、包含5个1-55之间不重复随机数的数组,你可以根据自己的需求选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:09:34