如何在java中绘制一个正方形?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在java中绘制一个正方形?相关的知识,希望对你有一定的参考价值。

这是我要做的事情:

您将编写一个程序,将由#符号组成的正方形绘制到网格上。用户将按顺序输入网格上正方形左下角的大小(边长),x坐标和y坐标作为命令行参数进行编程。

换句话说,这三个值将存储在程序开头的String数组args中,作为值args[0], args[1], and args[2]。您可以使用命令Integer.parseInt()将String转换为int。假设输入参数是有效的int。

例如,在DrJava的Interactions窗格中:

运行Que s ti on 2 5 1 1表示我们想绘制一个边长为5的正方形,其左下角位于(1,1)位置。此问题中的所有距离都是字符数。默认情况下,程序应将方块打印到15x15网格上,但如果方形不适合,则必须相应地扩展网格。

我试图分三个步骤构建我的程序。

  1. 编写代码以正确显示轴。
  2. 构建一个解决方案,其中方块始终适合15x15网格。
  3. 如何扩展程序使其适用于较大的正方形或偏移太大以适应15x15网格的正方形。

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

import java.util.Scanner;

public class drawS 
    public static void main(String[] args) 
        Scanner ask = new Scanner(System.in);

        int length = ask.nextInt();
        int i;
        int r = 15;
        int xmax = 15;
        int ymax = 15;

        drowLine(length);

        System.out.println();

        if (i == 0 && j == 0) 
            System.out.print("+");
        
        if (i == 0 && j <= ymax) 
            System.out.print("|");
        
        if (j == ymax) 
            System.out.print("^");
        
        for (int j = ymax; j >= 0; j--) 
            for (int i = 0; i <= xmax; i++) 
                for (i = 0; i < length - 2; i++) 
                    drowEmptyLine(length);
                    System.out.println();
                
                drowLine(length);
            

            public static void drowLine ( int n)
                for (int i = 0; i < n; i++) 
                    System.out.print("");
                
            

            public static void drowEmptyLine ( int n)
                System.out.print("");
                for (int i = 0; i < n - 2; i++) 
                    System.out.print("# ");
                
                System.out.print('#');
            
        
    

答案

显然做了一点挖掘:-)

首先,我们必须抓住CLI上给出的args并将它们转换为已消毒的int。

    public static void main(String[] args) 
        try 
            int size = Integer.parseInt(args[0]);
            int x = Integer.parseInt(args[1]);
            int y = Integer.parseInt(args[2]);

            if (size < 1 || size > 30) 
                System.out.println("Setting size to 5");
                size = 5;
            

            if (x < 0 || x > 30) 
                System.out.println("Setting x to 2");
                x = 2;
            

            if (y < 0 || y > 30) 
                System.out.println("Setting y to 2");
                y = 2;
            

            int height = Math.max(y + size + 1, 15);
            int width = Math.max(x + size + 1, 15);
            drawSquare(height, width, size, x, y);
         catch (Exception e) 
            System.out.println(e.getMessage());
        
    

为了绘制正方形,我们必须自上而下,因为我们正在使用CLI。或者,可以填充一个大的char[][]并在末尾打印出来 - 从上到下:-)。部分代码中的整个“-1”基本上是由于数组等基于0的事实。

    static void drawSquare(int height, int width, int size, int x, int y) 
        for (int line = height -1 ; line >= 0; line--) 
            drawline(line, size, x, y, width);
        
    

线条可以分为空行,表示正方形顶部和底部的行,以及表示正方形内容的行。

    static void drawline(int line, int size, int x, int y, int width) 
        if (line > y + size - 1 || line < y) 
            drawEmptyLine(width);
         else if (line == y + size - 1 || line == y) 
            drawBorder(x, size, width);
         else 
            drawContent(x, size, width);
        
    

空行很简单:

    static void drawEmptyLine(int width) 
        draw(emptyLine(width));
    

    static char[] emptyLine(int width) 
        char[] dots = new char[width];
        Arrays.fill(dots, 0, width, '.');
        return dots;
    

    static void draw(char[] chars) 
        StringBuffer sb = new StringBuffer(chars.length);
        sb.append(chars);
        System.out.println(sb);
    

边框和内容线只是用空格替换空行中的点:

    static void drawContent(int x, int size, int width) 
        char[] dots = emptyLine(width);
        dots[x] = '#';
        dots[x + size - 1] = '#';
        draw(dots);
    

    static void drawBorder(int x, int size, int width) 
        char[] dots = emptyLine(width);
        Arrays.fill(dots, x, x + size, '#');
        draw(dots);
    

而已。

以上是关于如何在java中绘制一个正方形?的主要内容,如果未能解决你的问题,请参考以下文章

如何从点绘制正方形?

如何在 uiimage iOS 中围绕眼睛和嘴巴绘制正方形或圆形

如何在 QCheckBox 中的文本和复选框之间绘制一个正方形

如何在元素内使用 Javascript 绘制正方形?

Gmap:如何在地球上绘制正方形(纬度,经度)

如何在 PyQt5 GUI python 中单击按钮时绘制方形图