首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 陣列隨機替換指定位置元素的實現方法

     編輯:程式設計疑難解答

需求場景

有一個長度為 100 的字元陣列,初始內容全為波浪線(~)。需隨機選取 5 個不重複的位置,將其替換為加號(+)。這是典型的「隨機抽樣替換」問題。

核心思路

  1. 生成 5 個 0~99 之間不重複的隨機索引。
  2. 遍歷陣列,當索引匹配時執行替換。
  3. 或直接對隨機索引對應的陣列元素賦值,無需全遍歷。

代碼實現

import java.util.Random;
import java.util.HashSet;
import java.util.Set;

public class ArrayRandomReplace {
    public static void main(String[] args) {
        char[] arr = new char[100];
        // 初始化為 '~'
        for (int i = 0; i < arr.length; i++) {
            arr[i] = '~';
        }

        Random rand = new Random();
        Set indices = new HashSet<>();
        // 生成 5 個不重複隨機索引
        while (indices.size() < 5) {
            indices.add(rand.nextInt(100)); // 0-99
        }

        // 執行替換
        for (int idx : indices) {
            arr[idx] = '+';
        }

        // 輸出驗證
        System.out.println(new String(arr));
    }
}

關鍵點說明

  • HashSet 去重:確保隨機位置不重複,避免覆蓋同一位置導致實際替換數少於 5 個。
  • 直接索引賦值:無需遍歷整個陣列比對,效率更高,代碼更簡潔。
  • 邊界處理:`nextInt(100)` 生成 0~99,完美匹配陣列索引範圍。

進階擴展

若需替換為多種字元、或按權重隨機選取,可引入 `ThreadLocalRandom`(多線程環境)或 `Collections.shuffle` 打亂索引列表後取前 N 個。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved