Java中的倒三角形

时间:2014-12-08 12:13:31

标签: java

我试图在java中创建一个倒三角形,但我不知道我的代码有什么问题

public void Tr1(int height, int begin, int pos, char ch){
    for (int i = 0;i < height;i++){
        for (int k = height;k > height - 1 - i;k--){
            System.out.print(" ");
        }
        for (int j = 0;j < pos;j++){
            System.out.print(" ");
        }
        for (int v = 0;v < i*2+begin;v++){
            System.out.print(ch);
        }
        System.out.println();
    }
}

结果是:

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

我想要这个

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

5 个答案:

答案 0 :(得分:2)

已经提出了许多类似的问题,例如I'm having trouble making a diamond shape with loops

我发布了一个递归的答案,可以很容易地适应你的情况

public class InvertedTriangle {
    static int iteration = 0;
    public static void printDiamond(int n) {
        int numberOfBlanks = n - iteration;
        int numberOfStars = iteration * 2 + 1;
        String blank = new String(new char[numberOfBlanks]).replace("\0", " ");
        String star = new String(new char[numberOfStars]).replace("\0", "*");
        String row = blank + star + blank;

        iteration++;
        if (iteration < n) {
            printDiamond(n);
        }
        // printing the rows backward
        System.out.println(row);
    }

    public static void main(String[] args) {
        printDiamond(5);
    }
}

打印

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

在您提问编辑后更新

public class InvertedTriangle {
    static int iteration = 0;

    public static void printDiamond(int n) {
        int numberOfBlanks = n - iteration;
        int numberOfInnerBlanks = iteration > 0 ? iteration * 2 - 1 : 0;
        String blank = new String(new char[numberOfBlanks]).replace("\0", " ");
        String innerBlank = new String(new char[numberOfInnerBlanks]).replace("\0", " ");
        String star = "*";
        String row = iteration == n - 1 ? blank + new String(new char[n * 2 - 1]).replace("\0", "*") + blank : iteration > 0 ? blank + star + innerBlank + star + blank : blank + star + blank;

        iteration++;
        if (iteration < n) {
            printDiamond(n);
        }
        // printing the rows backward
        System.out.println(row);
    }

    public static void main(String[] args) {
        printDiamond(10);
    }
}

打印

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

答案 1 :(得分:0)

你走了?

public static void main (String[] args)
{
    int height = 9; // Height of triangle
    char ch = '*';

    for(int currHeight = 0; currHeight <= height; currHeight++)
    {
        for(int space = 0; space < currHeight; space++)
        {
            System.out.print(" ");
        }

        int requiredStars = (height - currHeight) * 2 + 1;
        for(int stars = 0; stars < requiredStars; stars++)
        {
            System.out.print(ch);
        }
        System.out.println();
    }
}

<强>输出:

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

您只需操纵for循环中使用的变量即可 试图猜测你需要什么类型的三角形并不容易。


使用更好的变量命名约定而不是j, k, v

答案 2 :(得分:0)

可以重写第一个循环,因为k没有被进一步使用。

for (int k = height; k > height - 1 - i; k--) {
for (int k = 0; k > - 1 - i; k--) {
for (int k = 0; k < 1 + i; ++k) {

但你的意思是逆,减少缩进:

for (int k = 0; k < height - 1 - i; ++k) {

我最大将是身高-1。

答案 3 :(得分:0)

一个简单的方法draw()并调用:

public class Triangle{

    public static void main(String[] args){

       Triangle.draw(5, "*");

        }

    public static void draw (int height, String st){
        for (int i=0; height>i; height--){
            System.out.println(new String(new char[height]).replace("\0", st));
        }
    }


    }

结果:

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

答案 4 :(得分:0)

您可以使用下面的draw()方法绘制倒置的等边三角形。

当然,这不是真正的等边三角形,因为尽管所有边都有相同数量的星号。等宽字符的平均宽高比为3:5。

* * *
 * *
  *

DrawTriangle.java

import java.util.*;

public class DrawTriangle {
    public static void main(String[] args) {
        System.out.println(draw("*", 10));
    }

    public static String draw(String symbol, int side) {
        StringBuilder sb = new StringBuilder();

        // Top line
        for (int i = side; i > 0; i--){
            sb.append(symbol + " ");
        }
        sb.append("\n");

        // Sides
        for (int i = side-2; i > 0; i--){
            // Left Side
            for (int j = 1; j < side-i; j++) {
                sb.append(" ");
            }
            sb.append(symbol);

            // Right Side
            for (int k = 1; k <= (i * 2)- 1 ; k++) {
                sb.append(" ");
            }
            sb.append(symbol).append("\n");
        }

        // Bottom point
        for (int i = side-1; i > 0; i--) {
            sb.append(" ");
        }
        return sb.append(symbol).append("\n").toString();
    }
}

输出

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