如何基于线性数据生成指定格式的5x5二维数组?Java代码修改
问题
我需要创建一个5x5的数值网格,当前Java代码如下:
public class a {public static void main(String[] args){int[][] arr ={ { 9, 15, 4, 10, 7, 26, 30, 18, 24, 21, 32, 39, 42, 37, 58, 21, 49, 56, 50, 74, 65, 75, 71, 72 },{ 12, 3, 7, 6, 11, 28, 24, 25, 22, 19, 31, 35, 45, 37, 52, 57, 56, 57, 53, 62, 66, 67, 72, 75 },{ 4, 8, 5, 2, 13, 25, 27, 22, 26, 18, 36, 33, 34, 44, 50, 59, 48, 58, 46, 74, 71, 73, 70, 66 },{ 11, 3, 7, 6, 12, 28, 24, 25, 22, 19, 31, 35, 45, 37, 52, 57, 56, 50, 53, 62, 66, 67, 72, 75 },{ 9, 15, 4, 10, 7, 26, 30, 18, 24, 21, 32, 39, 42, 37, 58, 51, 49, 56, 50, 74, 65, 75, 71, 72 },{ 10, 5, 12, 7, 2, 26, 24, 18, 29, 21, 33, 40, 43, 32, 49, 60, 57, 46, 56, 64, 67, 72, 62, 65 },{ 7, 8, 6, 14, 9, 27, 16, 23, 25, 21, 44, 37, 45, 34, 53, 52, 60, 56, 48, 73, 66, 65, 74, 62 },{ 4, 2, 13, 15, 6, 19, 24, 22, 26, 18, 33, 43, 34, 32, 55, 50, 58, 59, 46, 70, 73, 68, 64, 71 },{ 5, 13, 7, 12, 10, 29, 19, 23, 26, 30, 41, 36, 40, 35, 51, 54, 56, 48, 53, 71, 61, 66, 69, 74 },{ 5, 11, 9, 1, 2, 25, 16, 28, 20, 19, 39, 40, 44, 42, 55, 58, 54, 53, 60, 72, 67, 70, 61, 71 },{ 6, 7, 11, 3, 4, 17, 18, 25, 24, 20, 38, 42, 33, 41, 48, 54, 52, 57, 46, 66, 63, 69, 64, 61 } };;for (int i = 0; i < 1; i++)for (int j = 0; j < 5; j++)System.out.println(arr[i][j] );}}
当前输出为:
9 15 4 10 7
希望修改代码后输出如下格式的5x5网格:
9 26 32 58 74 15 30 39 21 65 4 18 FR 49 75 10 24 42 56 71 7 21 37 50 72
要求在前12个数字之后显示“FR”,然后展示剩余的12个数字。请问该如何修改代码?
解决方案
修改后的代码
public class GridPrinter { public static void main(String[] args) { int[][] arr = { {9, 15, 4, 10, 7, 26, 30, 18, 24, 21, 32, 39, 42, 37, 58, 21, 49, 56, 50, 74, 65, 75, 71, 72}, // 其他行数组内容保持原代码不变,此处省略以简化展示 }; // 提取第一行数据用于生成5x5网格 int[] targetRow = arr[0]; int gridSize = 5; for (int i = 0; i < gridSize; i++) { for (int j = 0; j < gridSize; j++) { // 计算网格位置对应的原数组索引(按列取数生成行) int dataIndex = i + j * gridSize; if (dataIndex == 12) { // 第13个位置(从0计数)输出FR System.out.printf("%-4s", "FR"); } else if (dataIndex < 12) { // 前12个数字直接输出 System.out.printf("%-4d", targetRow[dataIndex]); } else { // 跳过FR位置,原数组索引+1 System.out.printf("%-4d", targetRow[dataIndex + 1]); } } // 每行结束后换行 System.out.println(); } } }
关键修改说明
- 数据映射逻辑:5x5网格的每个位置
(i,j)对应原数组的索引为i + j*5,按列取数生成目标网格的行,匹配期望的排列顺序。 - FR替换处理:当计算出的索引等于12时(对应第13个元素,从0开始计数),输出“FR”;原数组中12之后的元素需要将索引加1,跳过被FR替换的位置。
- 格式化输出:使用
printf("%-4s", ...)和printf("%-4d", ...)让每个元素占4个字符宽度,实现网格的对齐效果。 - 代码可读性优化:修改类名为有意义的
GridPrinter,拆分数组定义并添加注释,提升代码可维护性。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

