В настоящее время я пытаюсь написать программу, которая рисует 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.
Если бы кто-нибудь мог меня тренировать, я бы очень признателен. Я не прошу, чтобы это было сделано для меня. Я действительно хочу это понять, но сейчас я немного застрял и очень расстроен.
Заранее благодарю за любую помощь!
Предположительно, вы хотите зацикливаться от 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);
for(int y = yAxismin; y >= yAxismin; y++)
. Разве вы не имели в виду это:for(int y = yAxismin; y <= yAxismax; y++)
?