мозаичная карта в java из массива

Я пытаюсь выполнить итерацию по двумерному массиву целых чисел, чтобы создать мозаичную карту с использованием Java Graphics2D.

    int[][] mapArray = {{1, 1, 1, 1, 1, 1, 1, 1},
                    {1, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 1},
                    {1, 1, 1, 1, 1, 1, 1, 1}};

    public void draw(Graphics2D g2d){
    for(int y = 0; y < mapArray.length; y++){
        for(int x = 0; x < mapArray[0].length; x++){
            if(mapArray[x][y] == 1){
                 ImageIcon ic = new ImageIcon("/Textures/stone.jpg");
                 g2d.drawImage(ic.getImage(), x, y, null);
            }
            else if(mapArray[x][y] == 0){
                 ImageIcon ic = new ImageIcon("/Textures/water.jpg");
                 g2d.drawImage(ic.getImage(), x, y, null);
            }

Я просто не могу понять логику повторения двумерного массива. В идеале каждый 0 будет представлять тайл воды, а каждый 1 — каменный тайл. Каждый раз, когда я запускаю это, я получаю NullPointerException.


person r0llingthund3r    schedule 06.07.2014    source источник
comment
Откуда берется NPE?   -  person MGorgon    schedule 07.07.2014
comment
что означает здесь NPE?   -  person Kick Buttowski    schedule 07.07.2014
comment
@KickButtowski: NullPointerException (я только что отредактировал вопрос OP и добавил тег nullpointerexception)   -  person TacticalCoder    schedule 07.07.2014
comment
@ user2684186: обратите внимание, что вы не должны создавать экземпляр нового ImageIcon внутри вашего дважды вложенного цикла for (который, кроме того, вызывается при каждом розыгрыше). Вы должны заранее прочитать свою плитку и рисовать оттуда.   -  person TacticalCoder    schedule 07.07.2014


Ответы (2)


x и y неправильно

public void draw(Graphics2D g2d){
    for(int y = 0; y < mapArray.length; y++){
        for(int x = 0; x < mapArray[y].length; x++){ //you want to use y here not 0
            if(mapArray[y][x] == 1){                 //first box is outer array second is inner one
                ImageIcon ic = new ImageIcon("/Textures/stone.jpg");
                g2d.drawImage(ic.getImage(), x, y, null);
            } else if(mapArray[y][x] == 0){
                ImageIcon ic = new ImageIcon("/Textures/water.jpg");
                g2d.drawImage(ic.getImage(), x, y, null);
            }
        }
    }
}
person BevynQ    schedule 06.07.2014

Я мог видеть потенциально две большие проблемы в вашем коде: в вашем коде «y» представляет строки, а «x» представляет столбцы, но в вашем операторе if вы выбираете [столбец] [строка], и во время пробного прогона вы, вероятно, считаете [ row][column] и, во-вторых, вы всегда считаете столбцы, которые присутствуют в первой строке. если ваша структура данных всегда nXn, в таком случае она будет работать, но в любом другом случае у вас будут другие результаты, и вы можете столкнуться с исключением ArrayIndexOutofBound.

person Owais Ahmed    schedule 06.07.2014