Java打印二维矩阵时如何实现数字等间距格式化对齐
Java中JOptionPane打印二维幻方的等间距排版实现
问题背景
使用Java Swing的JOptionPane弹窗输出magic二维幻方矩阵时,若矩阵内元素数字长度不统一(例如同时包含个位数1、三位数421),采用遍历元素后拼接固定长度空格再换行的原始实现方式,会因为不同长度数字的占位差导致列间距不均,最终打印效果歪斜不规整。需要调整打印逻辑,实现所有数字统一间距的整齐排版。
存在缺陷的原始实现
原始代码固定拼接15个空格作为元素间隔,没有适配不同长度的数字,是排版错位的核心原因,代码如下:
//PRINT String print1= " "; for (int i=0;i<n;i++){ for (int j=0;j<n;j++){ print1+= magic[i][j]; print1+=" "; } print1 += "\n"; } JOptionPane.showMessageDialog(null,print1);
可落地的对齐方案
两种方案均通过动态匹配元素长度调整后置空格数的思路实现对齐,保证每个元素加后续空格的总占位宽度一致,最终输出规整的矩阵效果:
- 方案1:根据数值范围判断位数
通过数值区间判断当前数字的位数,不同位数对应拼接不同长度的后置空格,实现代码如下:
//PRINT MATRIX String print1= ""; for (int i=0;i<n;i++){ for (int j=0;j<n;j++){ print1+= magic[i][j]; if (magic[i][j]<10) print1+=" "; else if(magic[i][j]>9&&magic[i][j]<100) print1+=" "; else if(magic[i][j]>=100&&magic[i][j]<1000) print1+=" "; else print1+=" "; } print1 += "\n"; } JOptionPane.showMessageDialog(null,magic+"\nMagic number: "+nMagic,"Magic square "+n+"x"+n+"",JOptionPane.PLAIN_MESSAGE);
- 方案2:根据字符串长度判断位数
调用String.valueOf()将整数元素转为字符串,直接获取字符串长度作为数字位数,再对应调整拼接的空格数量,相比数值区间判断的方式写法更简洁,对更高位数数字的适配扩展性更好,实现代码如下:
//PRINT MATRIX String print1= ""; String slength=""; for (int i=0;i<n;i++){ for (int j=0;j<n;j++){ print1+= magic[i][j]; slength=String.valueOf(magic[i][j]); if (slength.length()<2) print1+=" "; else if(slength.length()<3) print1+=" "; else if(slength.length()<4) print1+=" "; else print1+=" "; } print1 += "\n"; }
内容的提问来源于stack exchange,提问作者Anibal
相关产品推荐
相关产品推荐

