Java实现字符向量元素按随机规则填充到10×10矩阵问题
填充逻辑调整方案
核心逻辑修正说明
你原来的思路存在两个核心问题:
- 变量名存在笔误:
frase应为phrase,vet应为vector - 不应逐行遍历矩阵赋值,而是按照「字符顺序+步长跳转」的规则在矩阵中选位置放字符
具体实现逻辑如下:
- 将10×10二维矩阵映射为0~99的一维位置索引,坐标换算规则:
行索引 = 位置 / 10,列索引 = 位置 % 10 - 初始化矩阵所有元素为空白占位符(比如空格)
- 第一个字符放在起始位置0对应的矩阵坐标
[0][0] - 后续每个字符:先生成0/1/2的随机步长,计算新位置 = 上一个位置 + 步长,如果新位置超过99则自动调整到合理范围,再将当前字符放入新位置对应的矩阵坐标
- 所有字符填充完成后,遍历输出矩阵即可
修正后完整代码
import java.util.Scanner; public class MatrixFill { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); System.out.println("Type a phrase."); String phrase = entrada.nextLine(); // 校验字符长度不超过50 while (phrase.length() > 50) { System.out.println("The phrase has to be less than 50 characters. Try again."); phrase = entrada.nextLine(); } int charLength = phrase.length(); String[] vector = new String[charLength]; for (int i = 0; i < charLength; i++) { vector[i] = String.valueOf(phrase.charAt(i)); } // 初始化10x10矩阵,默认填充空格 String[][] matrix = new String[10][10]; for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { matrix[i][j] = " "; } } int currentPos = 0; // 放第一个字符 matrix[currentPos / 10][currentPos % 10] = vector[0]; // 遍历剩余所有字符 for (int i = 1; i < charLength; i++) { int step = (int) (Math.random() * 3); currentPos += step; // 防止位置超出矩阵范围(最大索引为99) if (currentPos >= 100) { currentPos = 99; } // 填充当前字符到对应位置 matrix[currentPos / 10][currentPos % 10] = vector[i]; } // 打印矩阵查看效果 System.out.println("\n填充后的矩阵效果:"); for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { System.out.print(matrix[i][j] + " "); } System.out.println(); } entrada.close(); } }
关键逻辑说明
- 用一维位置索引处理跳转逻辑,避免二维坐标加减的复杂判断,实现更简单
- 随机步长严格按照要求用
(int)(Math.random() * 3)生成,取值范围是0、1、2符合规则要求 - 增加了越界保护,避免跳转超出10×10矩阵的范围触发数组越界异常
- 空白位置填充空格,输出时字符的分散效果更清晰
内容的提问来源于stack exchange,提问作者Wanderer
相关产品推荐
相关产品推荐

