猿问

如何在 Java 中围绕二维锯齿状数组打印边框

我需要在像这样的二维锯齿状数组周围放置一个边框:


{' ', ' ', ' '}

{' ', ' ', ' '}

{' ', ' ', ' ', ' '}

{' ', ' ', ' ', ' '}

{' ', ' ', ' ', ' ', ' '}

要打印如下所示的内容:


*****

*   *

*   *

*    *

*    *

*     *

*******

我想我从第一行开始:


for (int i = 0; i < a.length; i++) {

          System.out.print('*');          

    }

但我被难住了(如果它甚至是正确的)。我怎么能在数组的维度之间打印?


慕的地6264312
浏览 245回答 2
2回答

温温酱

我们可以通过打印顶部边框,然后打印中间内容,最后打印底部边框来处理这个问题。这里的技巧是我们实际上不必担心超出数组的索引。对于模式的中间部分,我们只是迭代数组的边界,并在两边附加一个边界。除了第一个和最后一个锯齿状一维数组的大小外,顶部和底部边框实际上并不涉及数组内容。for (int i=0; i <= array[0].length + 1; ++i) {&nbsp; &nbsp; System.out.print("*");}System.out.println();for (int r=0; r < array.length; ++r) {&nbsp; &nbsp; System.out.print("*");&nbsp; &nbsp; for (int c=0; c < array[r].length; ++c) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.print(array[r][c]);&nbsp; &nbsp; }&nbsp; &nbsp; System.out.println("*");}for (int i=0; i <= array[array.length-1].length + 1; ++i) {&nbsp; &nbsp; System.out.print("*");}******&nbsp; &nbsp;**&nbsp; &nbsp;**&nbsp; &nbsp; **&nbsp; &nbsp; **&nbsp; &nbsp; &nbsp;********

慕斯王

我将从一种构建单行的方法开始。这可以通过StringBuilder. 以 a 开头*,添加作为输入传入的所有字符,最后添加另一个*。将其作为String. 喜欢,public static String oneLine(char[] ch) {&nbsp; &nbsp; StringBuilder sb = new StringBuilder();&nbsp; &nbsp; sb.append("*");&nbsp; &nbsp; sb.append(Stream.of(ch).map(String::valueOf).collect(Collectors.joining("")));&nbsp; &nbsp; sb.append("*");&nbsp; &nbsp; return sb.toString();}然后我们可以调用它来构建所有的行。可以通过复制第一个和最后一个条目(所有空格为星号)来构建大纲。喜欢,char[][] arr = { { ' ', ' ', ' ' }, { ' ', ' ', ' ' }, { ' ', ' ', ' ', ' ' },&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; { ' ', ' ', ' ', ' ' }, { ' ', ' ', ' ', ' ', ' ' } };System.out.println(oneLine(arr[0]).replace(' ', '*'));for (char[] ch : arr) {&nbsp; &nbsp; System.out.println(oneLine(ch));}System.out.println(oneLine(arr[arr.length - 1]).replace(' ', '*'));输出(根据要求)******&nbsp; &nbsp;**&nbsp; &nbsp;**&nbsp; &nbsp; **&nbsp; &nbsp; **&nbsp; &nbsp; &nbsp;********
随时随地看视频慕课网APP

相关分类

Java
我要回答