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

Java多维数组转置实现及Math.random范围修正求助

修正Java矩阵转置与随机数生成问题

1. 随机数范围修正

原代码生成的随机数仅覆盖-50到0区间,因为Math.random() * 50得到0 ≤ x < 50的浮点数,减50后范围被限制在-50 ≤ x < 0,无法覆盖0到50的数值。要生成-50到50(包含两端整数)的随机数,使用以下公式:

t[f][c] = (int) (Math.random() * 101) - 50;

原理:Math.random() * 101生成0 ≤ x < 101的浮点数,强转int后得到0到100的整数,减50即可覆盖-50到50的完整范围。

2. 矩阵转置逻辑修正

原代码的交换逻辑仅处理了对角线附近的少量元素,完全不符合转置要求。针对5x5方阵,提供两种可行修正方案:

方案一:原地转置(仅适用于方阵)

遍历矩阵的上三角区域(行号小于列号的元素),交换matrix[row][col]与matrix[col][row],避免重复交换:

for (f = 0; f < F; f++) {
    for (c = f + 1; c < C; c++) {
        int aux = t[f][c];
        t[f][c] = t[c][f];
        t[c][f] = aux;
    }
}

方案二:新建矩阵存储转置结果(适用于所有矩阵)

若不想修改原矩阵或处理非方阵,新建一个C行F列的矩阵,将原矩阵元素[f][c]赋值给新矩阵的[c][f]:

int[][] transposed = new int[C][F];
for (f = 0; f < F; f++) {
    for (c = 0; c < C; c++) {
        transposed[c][f] = t[f][c];
    }
}

完整修正后的代码

以下是采用原地转置方案的完整代码,同时补充了转置后的打印逻辑:

final int F = 5;
final int C = 5;
int f, c, aux;

int t[][] = new int[F][C];

// 生成-50到50的随机整数
for (f = 0; f < F; f++) {
    for (c = 0; c < C; c++) {
        t[f][c] = (int) (Math.random() * 101) - 50;
    }
}

System.out.println("Before transpose: ");
for (f = 0; f < F; f++) {
    for (c = 0; c < C; c++) {
        System.out.printf("%3d ", t[f][c]);
    }
    System.out.println();
}

System.out.println("\nAfter transpose: ");
// 原地转置方阵
for (f = 0; f < F; f++) {
    for (c = f + 1; c < C; c++) {
        aux = t[f][c];
        t[f][c] = t[c][f];
        t[c][f] = aux;
    }
}

// 打印转置后的矩阵
for (f = 0; f < F; f++) {
    for (c = 0; c < C; c++) {
        System.out.printf("%3d ", t[f][c]);
    }
    System.out.println();
}

关键修改说明

  • 随机数:调整生成公式,覆盖-50到50的完整整数范围。
  • 转置逻辑:替换原错误循环,通过上三角遍历交换实现正确的原地转置。
  • 输出优化:调整格式符让矩阵输出更整齐,移除多余换行符避免空行。

内容的提问来源于stack exchange,提问作者jösü

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:05:29