Java实现指定起始值拉丁方阵时移位错误如何修复
问题根源
- 三层循环冗余:你当前使用了
row/column/shift三层嵌套循环,实际上拉丁方阵仅需两层循环(外层控制行数,内层控制当前行的列元素),多余的循环层和错误的换行位置,是行数超出预期的核心原因 - 数值未做取模校正:你计算
latin的时候直接加偏移量,没有对阶数order取模,自然会出现超过最大值的情况
修改后完整代码
public static void main(String[] args){ int first = 2; // 方阵起始数字 int order = 4; // 方阵阶数/最大数值 String space = " "; // 外层循环:控制行数 for (int row = 0; row < order; row++) { // 内层循环:控制当前行的每个元素 for (int column = 0; column < order; column++) { // 计算当前位置的数值:(起始值偏移 + 行偏移 + 列偏移) 取模后转1-based int latin = ((first - 1 + row + column) % order) + 1; System.out.print(latin + space); } // 每行所有元素输出完再换行 System.out.println(); } }
输出验证
运行后输出结果和你预期完全一致:
2 3 4 1 3 4 1 2 4 1 2 3 1 2 3 4
内容的提问来源于stack exchange,提问作者100110010010011
相关产品推荐
相关产品推荐

