Как исправить ошибку «Координаты за пределами границ» в моем коде на Java?

Вот как выглядит мой код. Я получаю сообщение об ошибке «Исключение в потоке «основной» java.lang.arrayIndexOutofBoundsException: координата выходит за пределы!» Я не знаю, что это значит и как это исправить, поэтому любая помощь приветствуется.

import java.awt.Color;

public class Assignment9 {

    /**
     * @param args
     * @return
     */

    public static void removeBlue(Picture pic){
        Color cPic = pic.get(100,100);
        //remove blue color pane from image, set blue weight to 0
        int h = pic.height();
        int w = pic.width();
        System.out.println(cPic);
        //^this shows the red, green, and blue weights
        int b = cPic.getBlue();
        int r = cPic.getRed();
        int g = cPic.getGreen();
        System.out.println("r=" +r +"g="+g+"b="+b);
        pic.setColor(w, h, r, g, 0);   
        for(int x=0; x<w ; x++){
                //need to set color
                pic.setColor(w, h, r, g, 0);}

    }
    public static void drawredStripe(Picture pic){
    //draw a red vertical stripe that is 200 pixels wide through the middle of the image
        Color cPic = pic.get(100,100);
        int h = pic.height();
        int w = pic.width();
        int b = cPic.getBlue();
        int r = cPic.getRed();
        int g = cPic.getGreen();
        for(int x=0; x<h ; x++){
            for (int y = (w/2)-100; y <(w/2)+100; y++){
                //need to set color
                pic.setColor(x, y, r, 0, 0);
            }
        }

    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Picture dolphin= new Picture("dolphin_swimming.jpg");
        removeBlue(dolphin);   
        dolphin.show();
        drawredStripe(dolphin);
        dolphin.show(); 
}
}

person user3491359    schedule 02.04.2014    source источник
comment
Из какой строки ошибка? И что такое ш? Если w ‹ 200, то могут возникнуть проблемы с отрицательными значениями y. Также вы можете поменять местами h и w в своем коде.   -  person demongolem    schedule 03.04.2014
comment
В drawredstripe вы используете x в качестве вертикальной координаты и y в качестве горизонтальной координаты. Мне это не кажется правильным.   -  person Dawood ibn Kareem    schedule 03.04.2014


Ответы (2)


Я собираюсь предположить, что это

pic.setColor(w, h, r, g, 0);

Вы перебираете x, но не используете x в цикле for в removeBlue.

Координата (w, h) может быть за пределами допустимого диапазона, что и утверждает ошибка.

person demongolem    schedule 02.04.2014

В ваших вызовах setColor значения x и y (первые два аргумента вызова метода) являются координатами. И эти координаты должны находиться в пределах, установленных Picture, который вы пытаетесь изменить:

  • Если ширина Picture равна w, то границы для координаты x включают [0 ... w - 1] включительно.

  • Если высота Picture равна h, то границы для координаты y включают [0 ... h - 1] включительно.

Сообщение «координаты вне границ» говорит о том, что координаты (то есть значения x и y) не лежат в соответствующих границах.

Например, вы делаете это:

    int h = pic.height();
    int w = pic.width();
    // ...
    pic.setColor(w, h, r, g, 0);

Границы по оси X составляют от 0 до w - 1, но вы предоставляете x значение w. Границы по оси Y составляют от 0 до h - 1, но вы предоставляете y значение h. (И в вашем коде есть и другие места, где вы делаете эту и подобные ошибки.)


Я не знаю, что это значит и как это исправить, поэтому любая помощь приветствуется.

  1. Прочтите и поймите приведенное выше объяснение.
  2. Посмотрите на места, где вы вызываете setColor, и проанализируйте, находятся ли используемые вами значения x и y в допустимых пределах.
  3. При необходимости измените код.
  4. Тест... и повторите предыдущие шаги по мере необходимости.
person Stephen C    schedule 02.04.2014