Java中使用嵌套循环的三角形字模式

Java中使用嵌套循环的三角形字模式,java,algorithm,Java,Algorithm,对于本作业,输入任何单词后,它将以如下所示的模式打印(在本例中,单词为计算机): 目前,我的代码是: String output = ""; for (int a = word.length()-1; a >= 1; a--) { for (int b = 0; b < word.length(); b++) { out.print(" "); }

对于本作业,输入任何单词后,它将以如下所示的模式打印(在本例中,单词为计算机):

目前,我的代码是:

    String output = "";
        for (int a = word.length()-1; a >= 1; a--)
        {
            for (int b = 0; b < word.length(); b++)
            {
            out.print(" ");
            }
        out.println(word.charAt(word.length()-1-a));
        }

        for (int c = 0; c < word.length(); c++)
        {
            out.print(word.charAt(word.length()-1-c));  
        }
        out.print(word.substring(1));   
    return output + "\n";

任何建议或提示都将不胜感激,提前谢谢

不要编写适用于每种情况的神奇代码,而是尝试使用适用于每种情况的代码:

String someString = "COMPUTER";
    switch(someString.length()) {
    case 0: System.out.println();
            break;
    case 1: System.out.println(someString);
            break;
    default:
        int _spaces_before_after = someString.length()-1;
        int _spaces_middle = 0;
        for(int i=0; i<someString.length(); i++){
            if(i!=someString.length()-1){
                if(i==0){
                    for(int j=0; j<_spaces_before_after; j++)
                        System.out.print(" ");
                    System.out.print(someString.charAt(0));
                    for(int j=0; j<_spaces_before_after; j++)
                        System.out.print(" ");
                    System.out.println();
                    _spaces_middle = 1;

                }
                else {
                    for(int j=0; j<_spaces_before_after; j++)
                        System.out.print(" ");
                    System.out.print(someString.charAt(i));
                    for(int j=0; j<_spaces_middle; j++)
                        System.out.print(" ");
                    System.out.print(someString.charAt(i));
                    for(int j=0; j<_spaces_before_after; j++)
                        System.out.print(" ");
                    System.out.println();
                    _spaces_middle+=2;
                }
                _spaces_before_after-=1;
            }
            else {
                for(int j=someString.length()-1; j>=0; j--)
                    System.out.print(someString.charAt(j));
                for(int j=1; j<someString.length(); j++)
                    System.out.print(someString.charAt(j));
            }
        }
        break;
    }
String someString=“计算机”;
开关(someString.length()){
案例0:System.out.println();
打破
案例1:System.out.println(someString);
打破
违约:
int\u spaces\u before\u after=someString.length()-1;
int _spaces_middle=0;

对于(int i=0;i假设您有一个长度为
n
的字符串
str
。您将有一个大小为
n
×
2n+1
的矩阵

首先,您需要定义三角形的中心
c
,即位置
n

在矩阵的第一行中,仅在中间绘制第一个字母(
str[0]
),然后转到下一行

在第二行中,在
c-1
c+1
位置绘制第二个字母(
str[1]

在第三行中,在
c-2
c+2
位置绘制第三个字母(
str[2]

等等

最后一行比较棘手。从中心开始,你必须画出整个单词。从中心开始,你开始前后书写字符串


我尝试了一些实现,非常简单:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String str = br.readLine();

int n = str.length();

char[][] matrix = new char[n][2*n+1];

char[] chrArr = str.toCharArray();

// initializes the matrix with blank spaces
for (int i = 0; i < n; i++) {
    for (int j = 0; j < 2*n+1; j++) {
        matrix[i][j] = ' ';
    }
}

// build the two sides of the triangle
for (int i = 0; i < n - 1; i++) {
    matrix[i][n-i] = chrArr[i];
    matrix[i][n+i] = chrArr[i];
}

// last line, build the base of the triangle
for (int i = 0; i < n; i++) {
    matrix[n-1][n-i] = chrArr[i];
    matrix[n-1][n+i] = chrArr[i];
}

// print
for (int i = 0; i < n; i++) {
    for (int j = 0; j < 2*n+1; j++) {
        System.out.print(matrix[i][j]);
    }
    System.out.print("\n");
}
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
字符串str=br.readLine();
int n=str.length();
字符[]矩阵=新字符[n][2*n+1];
char[]chrArr=str.toCharArray();
//用空格初始化矩阵
对于(int i=0;i
这是正在运行的ideone。
您可以尝试任何字符串大小。

逻辑很简单,首先尝试使用
StringBuilder
reverse
创建最后一行。然后从第一行打印到最后一行

最后一行
的情况很简单

第一行
最后一行-1
,我们只需要打印距离等于0,1,2…到最后一行中心的字符

    public void printTriangle(String input) {
        String tmp = input.substring(1);//Take the suffix
        StringBuilder builder = new StringBuilder(tmp);
        builder = builder.reverse().append(input);//Reverse, then append it
        String line = builder.toString();//This is the last line
        for(int i = 0; i < input.length(); i++){
            for(int j = 0; j < line.length(); j++){
                //Print the last line, or those that have distance equals i to the center of the last line
                if(i + 1 == input.length() || Math.abs(j - line.length()/2) == i){
                    System.out.print(line.charAt(j));
                }else{
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }
输出

       C       
      O O      
     M   M     
    P     P    
   U       U   
  T         T  
 E           E 
RETUPMOCOMPUTER
            S            
           T T           
          A   A          
         C     C         
        K       K        
       O         O       
      V           V      
     E             E     
    R               R    
   F                 F   
  L                   L  
 O                     O 
WOLFREVOKCATSTACKOVERFLOW
输入

输出

       C       
      O O      
     M   M     
    P     P    
   U       U   
  T         T  
 E           E 
RETUPMOCOMPUTER
            S            
           T T           
          A   A          
         C     C         
        K       K        
       O         O       
      V           V      
     E             E     
    R               R    
   F                 F   
  L                   L  
 O                     O 
WOLFREVOKCATSTACKOVERFLOW

您要求使用嵌套循环,但还有其他几种方法,包括使用空格填充。如果允许您这样做,您只需要一个循环:

public static void printTriangle(String str){       
    int len = str.length()-1, idx = 1;

    System.out.println(String.format("%"+(len+1)+"s", str.charAt(0)));
    for(int x=0; x<str.length()-2; x++){
        System.out.print(String.format("%"+(len--)+"s", str.charAt(idx)));
        System.out.println(String.format("%"+(idx*2)+"s", str.charAt(idx++)));
    }
    System.out.println(new StringBuilder(str.substring(1)).reverse().toString() + str);
}

您需要计算出每行需要插入多少空格。这应该很简单,因为您已经计算出三角形的中间,您所需要做的就是根据打印的字符缩短循环(类似于您已经决定打印的字符)。这样您就可以看到左侧。右侧只是在打印换行之前做相反的操作。@anlam456请看下面我的解决方案。
            S            
           T T           
          A   A          
         C     C         
        K       K        
       O         O       
      V           V      
     E             E     
    R               R    
   F                 F   
  L                   L  
 O                     O 
WOLFREVOKCATSTACKOVERFLOW
public static void printTriangle(String str){       
    int len = str.length()-1, idx = 1;

    System.out.println(String.format("%"+(len+1)+"s", str.charAt(0)));
    for(int x=0; x<str.length()-2; x++){
        System.out.print(String.format("%"+(len--)+"s", str.charAt(idx)));
        System.out.println(String.format("%"+(idx*2)+"s", str.charAt(idx++)));
    }
    System.out.println(new StringBuilder(str.substring(1)).reverse().toString() + str);
}
       C
      O O
     M   M
    P     P
   U       U
  T         T
 E           E
RETUPMOCOMPUTER