簡體   English   中英

如何在Java中的2d鋸齒狀數組周圍打印邊框

[英]How to print a border around a 2d jagged array in Java

我需要在像這樣的二維鋸齒狀陣列周圍放置邊框:

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

要打印如下內容:

*****
*   *
*   *
*    *
*    *
*     *
*******

我想我從第一行開始:

for (int i = 0; i < a.length; i++) {
          System.out.print('*');          
    }

但我為此感到困惑(如果是正確的話)。 如何在數組尺寸之間進行打印?

謝謝

我們可以通過打印頂部邊框,然后打印中間內容,最后打印底部邊框來處理此問題。 這里的技巧是,我們實際上不必擔心超出數組的索引范圍。 對於模式的中間部分,我們僅迭代數組的邊界,並在兩側添加邊框。 除了第一個和最后一個鋸齒狀一維數組的大小以外,頂部和底部邊框實際上並不涉及數組內容。

for (int i=0; i <= array[0].length + 1; ++i) {
    System.out.print("*");
}
System.out.println();

for (int r=0; r < array.length; ++r) {
    System.out.print("*");
    for (int c=0; c < array[r].length; ++c) {
        System.out.print(array[r][c]);
    }
    System.out.println("*");
}

for (int i=0; i <= array[array.length-1].length + 1; ++i) {
    System.out.print("*");
}

*****
*   *
*   *
*    *
*    *
*     *
*******

我將從建立一條直線的方法開始。 可以使用StringBuilder完成。 *開頭,添加作為輸入傳入的所有字符,並在末尾添加另一個* String返回。 喜歡,

public static String oneLine(char[] ch) {
    StringBuilder sb = new StringBuilder();
    sb.append("*");
    sb.append(Stream.of(ch).map(String::valueOf).collect(Collectors.joining("")));
    sb.append("*");
    return sb.toString();
}

然后我們可以調用它來構建所有行。 可以通過復制第一個和最后一個條目(所有空格均為星號)來構建輪廓。 喜歡,

char[][] arr = { { ' ', ' ', ' ' }, { ' ', ' ', ' ' }, { ' ', ' ', ' ', ' ' }, 
        { ' ', ' ', ' ', ' ' }, { ' ', ' ', ' ', ' ', ' ' } };
System.out.println(oneLine(arr[0]).replace(' ', '*'));
for (char[] ch : arr) {
    System.out.println(oneLine(ch));
}
System.out.println(oneLine(arr[arr.length - 1]).replace(' ', '*'));

輸出(根據要求)

*****
*   *
*   *
*    *
*    *
*     *
*******

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM