如何在不修改char[][]返回类型的wrap方法下正确输出二维字符数组?
解决Java二维char数组打印哈希值的问题
问题原因
直接打印char[][]时,Java会调用Object类的默认toString()方法,输出格式为[[C@哈希值——这是数组的默认标识,而非实际存储的内容。
解决方法(不修改wrap方法返回类型)
方法1:使用Arrays.deepToString()
Java的java.util.Arrays类提供了deepToString()方法,专门处理多维数组的内容打印,会递归解析每一层数组元素。
修改后的完整代码:
import java.util.Arrays; public class Probe { private static char[][] wrap(String message) { char[] chars = message.toCharArray(); char[][] charArray = new char[4][7]; int index = 0; for (int zeilenIndex = 0; zeilenIndex < charArray.length; zeilenIndex++) { for (int spaltenIndex = 0; spaltenIndex < charArray[zeilenIndex].length; spaltenIndex++) { charArray[zeilenIndex][spaltenIndex] = chars[index]; index++; } } return charArray; } public static void main(String[] args) { String text = "WIR GREIFEN MORGEN MITTAG AN"; char[][] chars = wrap(text); // 替换原打印语句 System.out.println(Arrays.deepToString(chars)); } }
输出示例:
[[W, I, R, , G, R, E], [I, F, E, N, , M, O], [R, G, E, N, , M, I], [T, T, A, G, , A, N]]
方法2:手动遍历数组自定义输出格式
如果需要更直观的排版(比如每行打印一组字符),可以手动遍历二维数组,将每个一维char[]转为字符串输出:
修改后的完整代码:
public class Probe { private static char[][] wrap(String message) { char[] chars = message.toCharArray(); char[][] charArray = new char[4][7]; int index = 0; for (int zeilenIndex = 0; zeilenIndex < charArray.length; zeilenIndex++) { for (int spaltenIndex = 0; spaltenIndex < charArray[zeilenIndex].length; spaltenIndex++) { charArray[zeilenIndex][spaltenIndex] = chars[index]; index++; } } return charArray; } public static void main(String[] args) { String text = "WIR GREIFEN MORGEN MITTAG AN"; char[][] chars = wrap(text); // 遍历每行并转为字符串打印 for (char[] row : chars) { System.out.println(new String(row)); } } }
输出示例:
WIR GRE IFEN MO RGEN MI TTAG AN
额外提示
你的wrap方法依赖输入字符串长度恰好为4*7=28,如果输入长度不符会触发ArrayIndexOutOfBoundsException,可以添加长度校验逻辑避免异常。
内容的提问来源于stack exchange,提问作者Gert Wiebach
相关产品推荐
相关产品推荐

