Java二维数组:解决对角线单元格重复修改致值错误的问题
嘿,这个重复修改的坑我之前写矩阵处理代码时也踩过!咱们先理清楚问题:你现在的逻辑是找到一个-1就立刻修改它的对角单元格,结果同一个单元格被多个-1的操作覆盖了两次,导致乘了两次2(变成8),但你预期只乘一次(变成4)。下面给你两种解决思路,还有怎么排查重复处理的方法:
一、先排查重复处理的方法(快速定位问题)
如果你只是想确认哪些单元格被重复修改,最简单的方式是在修改单元格之前,打印出要修改的坐标和当前值。比如在你原来的代码里加一行日志:
# 嵌入你原有的修改逻辑中 if 0 <= ni < rows and 0 <= nj < cols: print(f"正在修改单元格({ni},{nj}),当前值: {matrix[ni][nj]}") matrix[ni][nj] *= 2
运行后,如果你看到同一个坐标被打印多次,就说明这个单元格被重复处理了。比如你提到的[1][2]会被打印两次,就能确认是被两个-1单元格的操作影响了。
二、解决重复修改的两种方案
方案1:统计修改次数,最后统一计算(适合需要多次乘2的场景)
如果你的需求是每个-1单元格都要让对角单元格乘2(比如被2个-1影响就乘2×2=4),那不要直接在遍历的时候修改原矩阵,而是先记录每个单元格需要被乘2的次数,最后一次性计算结果。这样就不会出现重复修改的问题,逻辑也更清晰。
举个Python代码例子:
# 你的3×3原矩阵 original_matrix = [ [1, -1, 2], [3, 4, 5], [6, -1, 7] ] rows, cols = len(original_matrix), len(original_matrix[0]) # 创建一个计数矩阵,记录每个单元格需要乘2的次数,初始为0 counts = [[0]*cols for _ in range(rows)] # 第一步:遍历所有-1单元格,统计对角单元格的修改次数 for i in range(rows): for j in range(cols): if original_matrix[i][j] == -1: # 四个对角方向的偏移量 diagonal_offsets = [(-1, -1), (-1, 1), (1, -1), (1, 1)] for di, dj in diagonal_offsets: ni, nj = i + di, j + dj # 确保坐标在矩阵范围内 if 0 <= ni < rows and 0 <= nj < cols: counts[ni][nj] += 1 # 第二步:根据计数计算最终矩阵 result_matrix = [] for i in range(rows): row = [] for j in range(cols): # 原值乘以2的count次方 row.append(original_matrix[i][j] * (2 ** counts[i][j])) result_matrix.append(row) print(result_matrix)
这样处理后,每个单元格的最终值是准确的,不会因为重复修改出错。
方案2:用集合记录已修改的单元格(适合只需要乘一次2的场景)
如果你的需求是不管被多少个-1影响,每个单元格只乘一次2(也就是你预期的结果),那可以用一个集合来存储已经被修改过的单元格坐标,每次修改前先检查是否已经处理过,没处理过才执行乘2操作。
代码示例:
original_matrix = [ [1, -1, 2], [3, 4, 5], [6, -1, 7] ] rows, cols = len(original_matrix), len(original_matrix[0]) modified_cells = set() # 存储已经修改过的(行,列)坐标 for i in range(rows): for j in range(cols): if original_matrix[i][j] == -1: diagonal_offsets = [(-1, -1), (-1, 1), (1, -1), (1, 1)] for di, dj in diagonal_offsets: ni, nj = i + di, j + dj if 0 <= ni < rows and 0 <= nj < cols: if (ni, nj) not in modified_cells: original_matrix[ni][nj] *= 2 modified_cells.add((ni, nj)) print(original_matrix)
这样就能保证每个单元格最多被修改一次,得到你预期的结果。
内容的提问来源于stack exchange,提问作者yatinsingla
相关产品推荐
相关产品推荐

