java - 四象限三角形

标签 java arrays for-loop

所以我有这个代码:

public class Triangle
{
    static int num;

    public static void main (String[] args)
    {
        num = Integer.parseInt(args[0]);
        Q1();
        Q2();
        Q3();
        Q4();
    }

    public static void Q1()
    {
        for(int i=0;i<=num;i++)
        {
            for(int j=0;j<i;j++)
            {
                System.out.print("*");
            }
            System.out.println();
        }

    }

    public static void Q2()
    {
        for(int i=0;i<=num;i++)
        {
            for(int j=num;j>0;j--)
            {
                if (i<j)
                    System.out.print(" ");
                else
                    System.out.print("*");
            }
            System.out.println();
        }

    }

    public static void Q3()
    {
        for (int i=0;i<num;i++) 
        {
            for (int j=0;j<i;j++) 
            {    
                System.out.print(" ");
            }

            for (int j=i;j<num;j++) 
            {    
                System.out.print("*");
            }
            System.out.println();
        }

    }

    public static void Q4()
    {
        for(int i=0;i<=num;i++)
        {
            for(int j=num;j>i;j--)
            {
                System.out.print("*");
            }
            System.out.println();
        }

    }

}

它输出如下:

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

我们需要做的是,我们需要将每个方法安排到相应的象限,例如,当仅调用 Q1 时,它需要在笛卡尔平面中的象限 1 的范围内显示星号。

因此,如果调用 Q1、Q2、Q3 和 Q4,它应该如下所示:

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

我将如何将每种方法安排到各自的象限?

最佳答案

这里有一个例子。

注意:最重要的是缓冲区。您必须能够使用缓冲区打印所有象限或它们的任何组合。

注意2:您必须遵守Java约定!

public static void main(String[] args) {
    int num = Math.max(1,Integer.parseInt(args[0]));

    char[][] buffer = new char[num * 2][num * 2]; // The Buffer is needed
    writeQ1(buffer, num);
    writeQ2(buffer, num);
    writeQ3(buffer, num);
    writeQ4(buffer, num);
    printBuffer(buffer);
}

// With a buffer, this method is needed
public static void printBuffer(char[][] buffer) {
    for (char[] cs : buffer) {
        for (char c : cs) {
            if (c == 0) {
                System.out.print(' ');
            } else {
                System.out.print(c);
            }
        }
        System.out.println();
    }
}

// The next methods can be refactored! 
public static void writeQ1(char[][] buffer, int num) { 
    for (int i = 0; i <= num; i++) {
        for (int j = 0; j < i; j++) {
            buffer[i][j + num] = '*';
        }
    }
}

public static void writeQ2(char[][] buffer, int num) {
    for (int i = 0; i <= num; i++) {
        for (int j = 0; j < i; j++) {
            buffer[i][j + (num - i)] = '*';
        }
    }
}

public static void writeQ3(char[][] buffer, int num) {
    for (int i = 0; i <= num; i++) {
        for (int j = 0; j < i; j++) {
            buffer[2*num - i][j + (num - i)] = '*';
        }
    }
}

public static void writeQ4(char[][] buffer, int num) {
    for (int i = 0; i <= num; i++) {
        for (int j = 0; j < i; j++) {
            buffer[2*num - i][j + num] = '*';
        }
    }
}

关于java - 四象限三角形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44692543/

相关文章:

java - 文件只能写入1个minReplication节点中的0个

java - 数组中负整数元素的最小总和,可以选择跳过元素但没有两个连续的元素

java - 二十一点游戏 - 如何使用 getter 和 toString() 方法

java - 求 N 和 M 之间的每个数字可以表示为一对素数之和的次数

java - 如何使用 Mockito JUNIT java.util.Function

java - 使用 md5 哈希密码 Smack 登录 Openfire

c# - 在 C# 中读取数组列

PHP PDO mySQL 查询返回列名和整数

python - 索引错误: list index out of range

c++ - 无法使用非成员开始和结束函数编写基于范围的内容