首页 > 解决方案 > 如何用文字制作一个空心正方形?

问题描述

所以我试图创建一个程序,我要求用户输入一个字符串,然后输出一个带有字符串的空心方块。因此,如果用户输入“四”,示例将如下所示:

输出:

fourf
r   o
u   u
o   r
fruof

到目前为止,我的代码是这样的:

// JAVA code for hollow rectangle 
import java.io.*; 
import java.awt.*;
import java.util.*;

class BasicAssign1 { 
  

public static void main(String args[]) 
{ 
    Scanner kb = new Scanner(System.in);
    System.out.println("Enter line: ");
    String word = kb.nextLine();
    char abc[]={};
    int a=0;
    a=word.length();

    
    for(int i=0; i<=word.length()-1; i++)
    {
      System.out.print(word.charAt(i));
      
      
    }
    

    
    int rows = word.length();
    int columns = word.length(); 
    int i;
    int j; 
    for (i = 0; i <=rows; i++) 
    { 

        for (j = 0; j <=columns; j++) 
        { 
          

            if (i == 0 || i == rows || j == 0 || j == columns) 
            {
              
              System.out.print(word.charAt(i));  
            }
            if( i==0 && j==columns){
              String word3 = "four";
              StringBuilder sb = new StringBuilder(word3);
              sb.reverse();
              word3 = sb.toString();
              System.out.println(word3);
              
            }
            else   
                System.out.print(" ");             
        } 
        System.out.println(); 
    } 
    
    
     
} 
} 

目前这输出:

fourf f f f fruof

o    o 
u    u 
r    r 

现在我只正确完成了 1-2 行,但假设是反向的第 3 行打印在顶部并且也没有对齐以形成正方形。任何帮助将不胜感激谢谢!

标签: javaarrays

解决方案


您可以通过注意以下事项来简化您的任务:

  • 第一行 = 单词 + 单词的第一个字母
  • 秒到长度行 = word[length-row],空白 * length-1,word[row]
  • 最后一行=单词的第一个字母+单词向后

并编写一个函数来实现它,例如

public static void square(String word) {
    int len = word.length();
    // first row: word + first letter of word
    System.out.println(word + word.charAt(0));
    // second to length row: word[length-row], blank * length-1, word[row]
    // create a blanks string
    String blanks = String.join("", Collections.nCopies(len - 1, " "));
    for (int i = 1; i < len; i++) {
        System.out.println(word.charAt(len-i) + blanks + word.charAt(i));
    }
    // last row: first letter of word + word backward
    String reversed = new StringBuilder(word).reverse().toString();
    System.out.println(word.charAt(0) + reversed);
}

你可以称之为例如

square("four");
square("eleven");

这将给出以下输出:

fourf
r   o
u   u
o   r
fruof

elevene
n     l
e     e
v     v
e     e
l     n
enevele

推荐阅读