Рисование квадрата по оси в Java

1

В настоящее время я пытаюсь написать программу, которая рисует sqaure. Пользователь вводит размер (по длине сторон), координату x и y-координату нижнего левого угла квадрата в сетке в качестве параметров командной строки для программирования в указанном порядке.

Таким образом, ввод "run Question2Square 5 1 1" рисует квадрат боковой длины 5, нижний левый угол которого находится в позиции (1, 1).

Я потратил несколько часов, пытаясь просто вернуть оси правильно. Я даже не на площади.

Мой текущий код у меня есть, но это неправильно:

import java.util.Scanner;

public class Question2square {
  public static void main(String[] args) {
    // Axis variables
    int yAxismin = 0;
    int yAxismax = 15;
    int xAxismin = 0;
    int xAxismax = 15;

    //Loop through all coordinates on plane using for loops
    for(int y = yAxismin; y >= yAxismin; y++)
    {
      for(int x = xAxismin; x >= xAxismin; x++)
      {
        //Draw the axis 
        if (Axis(x,y) != "") {
          System.out.print(Axis (x,y));
        }
      }
      System.out.println("");
    }
  }
  // This method draws the 15x15 axis
  public static String Axis(int x, int y)
  {
    // Each if and else if statement dictates what symbol needs to go where for the axes
    // If there is nothing to be drawn, there will simply be a blank space
    if (x == 15 && y== 0) return ">";
    else if(x == 0 && y == 15) return "^";
    else if (x == 0 && y == 0 )return ".";
    else if(x == 0 && y >= 0) return "|";
    else if(x >= 0 && y==0) return "-";
    else return "";
  }       
}

Все, что делает, запускает бесконечный цикл '-', и я не знаю точно, что случилось. Кроме того, мне нужно выяснить, как я могу расширить оси в любом направлении, если вводится вход, который больше, чем оси 15x15.

Если бы кто-нибудь мог меня тренировать, я бы очень признателен. Я не прошу, чтобы это было сделано для меня. Я действительно хочу это понять, но сейчас я немного застрял и очень расстроен.

Заранее благодарю за любую помощь!

  • 1
    Ваш цикл for никогда не закончится: for(int y = yAxismin; y >= yAxismin; y++) . Разве вы не имели в виду это: for(int y = yAxismin; y <= yAxismax; y++) ?
  • 0
    @NeplatnyUdaj, чтобы быть справедливым, они закончатся. Это займет очень много времени. Но это проблема, ха-ха
Показать ещё 1 комментарий
Теги:

1 ответ

3

Предположительно, вы хотите зацикливаться от yAxismin до yAxismax (а также для x)? Пытаться

for(int y = yAxismin; y <= yAxismax; y++)
{
  for(int x = xAxismin; x <= xAxismax; x++)
  {

Как и у вас, цикл for(int y = yAxismin; y >= yAxismin; y++) будет продолжаться очень долгое время. Это yAxismin что выражение "начало в yAxismin; loop, в то время как y больше, чем yAxismin, и на каждой итерации добавьте один к y ". Вам нужно, чтобы он остановился, когда y достигнет yAxismax.

Кроме того, не сравнивайте строки с == и !=. Используйте s1.equals(s2). Вы делаете эту ошибку на линии

if (Axis(x,y) != "") {

которые должны быть

if (!Axis(x, y).equals("")) {

Чтобы расширить оси, просто переходите к функции Axis:

public static String Axis(int x, int y, int maxX, int maxY)
{
    if (x == maxX && y== 0) return ">";    
    else if(x == 0 && y == maxY) return "^";     
    else if (x == 0 && y == 0 )return ".";    
    else if(x == 0 && y >= 0) return "|";    
    else if(x >= 0 && y==0) return "-";    
    else return "";    
}  
...
// call it with
String drawThis = Axis(x, y, xAxismax, yAxismax);
  • 0
    Благодарю за ваш ответ! Теперь я понимаю, почему было, казалось бы, бесконечное количество «-».
  • 0
    К сожалению, когда я пытаюсь напечатать ось, она печатает ось в квадранте IV, когда я хочу напечатать только квадрант I. Любой способ исправить это?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню