如何用JOptionPane对话框格式化打印二维数组及行列和
解决二维数组输出格式问题
核心问题
你的代码输出格式混乱的原因:
- 拼接输出字符串时未添加换行符,所有内容连成一行;
- 制表符
\t的对齐效果不稳定,不同长度的数字会导致排版错位; - 分隔线与列和之间没有换行,导致列和紧接在分隔线后。
修复后的完整代码
import javax.swing.JOptionPane; public class TwoDimensional_Array { public static void main(String[] args) { String output = ""; int[][] num = new int[3][3]; int[] rowSum = new int[3]; // 重命名为行和,更直观 int[] colSum = new int[3]; // 重命名为列和 System.out.println("\n3 by 3 Array - Enter Matrix Elements."); // 输入矩阵元素 for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) { String input = JOptionPane.showInputDialog(null, "Enter elements in pockets ["+ i +"]["+ j +"]:", "3 by 3 - Two-Dimensonal Array", JOptionPane.PLAIN_MESSAGE); num[i][j] = Integer.parseInt(input); } } // 计算行和与列和 for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) { rowSum[i] += num[i][j]; colSum[j] += num[i][j]; } } // 拼接每行元素+行和,添加换行 for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) { // 格式化固定宽度左对齐,保证排版整齐 output += String.format("%-8d", num[i][j]); } // 行和部分格式化,添加换行符 output += String.format("= %d%n", rowSum[i]); } // 添加分隔线并换行 output += "__________________________%n".formatted(); // 拼接列和,固定宽度对齐 for(int i = 0; i < 3; i++) { output += String.format("%-8d", colSum[i]); } JOptionPane.showMessageDialog(null, output, "Two-Dimensional Array", JOptionPane.PLAIN_MESSAGE); } }
关键修改说明
- 强制换行:使用
%n(Java推荐的跨平台换行符),在每行结束、分隔线后添加换行,确保内容按预期分行显示; - 固定宽度格式化:用
String.format("%-8d", ...)实现左对齐的固定宽度输出,替代不稳定的制表符\t,保证所有元素和求和结果对齐整齐; - 变量名优化:将
sum改为rowSum、sum1改为colSum,提升代码可读性; - 规范常量:用
JOptionPane.PLAIN_MESSAGE替代魔法值-1,代码更易维护; - 列和计算优化:调整为更直观的累加方式(
colSum[j] += num[i][j]),和行和的计算逻辑保持一致,便于理解。
最终输出效果
运行后会生成和你期望完全一致的规整格式:
5 9 8 = 22 3 8 2 = 13 4 3 9 = 16 __________________________ 12 20 19
内容的提问来源于stack exchange,提问作者Code Apollo
相关产品推荐
相关产品推荐

