如何在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网格上,但如果方形不适合,则必须相应地扩展网格。
我试图分三个步骤构建我的程序。
- 编写代码以正确显示轴。
- 构建一个解决方案,其中方块始终适合15x15网格。
- 如何扩展程序使其适用于较大的正方形或偏移太大以适应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 中围绕眼睛和嘴巴绘制正方形或圆形