У меня возникли проблемы с вводом и отображением символов в отдельных индексах многомерного массива - PullRequest
0 голосов
/ 17 ноября 2011

Привет всем, я в настоящее время работаю над домашним заданием, где мы должны предложить пользователю, какой объект он хочет отобразить (прямоугольник или треугольник), а затем запросить у пользователя высоту и ширину объекта. Наконец, мы приглашаем пользователя для координат х и у, где начать «рисование объекта» Мы создаем «canvas», используя массив [20] [20] char, и мы используем этот массив для хранения и последующего отображения char для «рисования» объекта.

Проблема: Если я выберу x = 0, y = 0 для выбранных пользователем координат, все работает нормально. Если я выберу любое другое значение для x и y, то все выходные данные будут пустыми. Код ниже может кто-нибудь дать совет о том, что происходит? Спасибо за помощь.

import java.util.*;

public class Multidimensional {

public static char[][]canvas = new char[20][20];
public static int height, width, x, y;
public static char userChar;

public static void setRectangle()
{
    Scanner kb = new Scanner(System.in);
    System.out.println("Enter height");
    height = kb.nextInt();
    System.out.println("enter Width");
    width = kb.nextInt();
    System.out.println("Enter character");
    String input = kb.next();
    userChar = input.charAt(0);

    System.out.println("Enter location on canvas (x and y coordinate)");
    x = kb.nextInt();
    y = kb.nextInt();



    //loop for the rows
    for(int row=0; row<= height-1; row++){  

        //loop for the columns

        for(int column=0;column<=width-1;column++ ){ 

            canvas[row+y][column+x] = userChar; 
            //System.out.print("ROW+Y=   "   + (row+y));
            //System.out.print("    COLUMN+X=  " + (column+x));

        }


    }

    //displaying the array (for test purposes, not in final code)
    for(int row=0 ; row< 20; row++){

        for(int column=0; column <20; column++){


            System.out.print(canvas[row][column]);
        }
        System.out.println();
    }

}


public static void main(String[] args) {
    String userChoice;
    Scanner kb =new Scanner(System.in);
    boolean userQuit = false;

    while(userQuit ==false){


    System.out.println("1. Type S to draw a rectangle.");
    System.out.println("2. Type T to draw a triangle.");
    System.out.println("3. Type D to display.");
    System.out.println("4. Type Q to quit.");
    userChoice = kb.next();

    if(userChoice.equalsIgnoreCase("s"))
    {Multidimensional.setRectangle();
        }
    else if(userChoice.equalsIgnoreCase("q"))
    {break;}

    }
}

}

1 Ответ

1 голос
/ 17 ноября 2011

Я не уверен, что вы пытаетесь сделать.Но если вы инициализируете свой массив canvas, ваша проблема будет решена.

Попробуйте это внутри своей основной:

for(int i = 0; i < 20 ;i++)
    for(int j = 0; j < 20 ;j++)
        canvas[i][j]=' '; //or any character you like

ps осторожно с вашими x и y, так как вы можете получить ошибку indexOutOfBound, если выНе проверяйте, что ширина + x и высота + y меньше 20, потому что вы объявляете холст следующим образом: char[][]canvas = new char[20][20];, а не динамически с помощью пользовательского ввода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...