Вопрос:

Floodfill StackOverFlow, ИДЕЯ

java intellij-idea stack-overflow flood-fill

95 просмотра

2 ответа

39 Репутация автора

Я пытаюсь запрограммировать заливку, но есть проблема с рекурсией. Сообщение об ошибке гласит: « Исключение в потоке« AWT-EventQueue-0 »java.lang.StackOverflowError »

Вот мой код:

public class FillerSeedFill<PixelType> {
    public RasterImage<PixelType> filler (RasterImage<PixelType> img,
                                          int x, int y,
                                          PixelType newPixel,
                                          PixelType borderPixel,
                                          PixelType currentPixel
                                          ){

        RasterImage<PixelType> result = img;
        if ( borderPixel != currentPixel){
            if(currentPixel!=newPixel) {

                result = result.withPixel(x, y, newPixel);

                filler(img,x+1,y,newPixel,borderPixel,currentPixel);
                filler(img,x-1,y,newPixel,borderPixel,currentPixel);
                filler(img,x,y+1,newPixel,borderPixel,currentPixel);
                filler(img,x,y-1,newPixel,borderPixel,currentPixel);

                return result;
            }
        }
        return result;
    }
}

и на холсте:

if(jComboBoxSelectColoring.getSelectedIndex()==0){
   System.out.println("Seed fill");
   int currentPixel = 0x2f2f2f;
   System.out.println(currentPixel);
   fillerSeedFill.filler(rasterImage,
        previousX,previousY,
        0xC4D4AF,
        0x8AC249,
        currentPixel);
   System.out.println(previousX+" "+previousY);
   panel.repaint();
}

Есть ли возможность изменить XSS в IDEA? Я вспомнил, что в Eclipse было что-то вроде этого. (- XSS100M)

currentPixel - это цвет фона канвы (0x2f2f2f).

РЕДАКТИРОВАТЬ: В предыдущем X и Y является Int позиция курсора от слушателя.

РЕДАКТИРОВАНИЕ РЕШЕНО: проблема в том, что текущий пиксель не принял фактическое значение цвета. Это имеет постоянный. 0x2f2f2f, так что сравнения не было. :).. Спасибо всем

Автор: pajasv Источник Размещён: 09.11.2017 12:02

Ответы (2)


0 плюса

12628 Репутация автора

Чтобы установить arg Xss, в intelliJ вы можете сделать: Определить параметры конфигурации конфигурации run / debug

  1. Выберите вкладку «Конфигурация» в диалоговом окне «Редактировать настройки запуска / отладки».
  2. В поле Main class укажите класс, который содержит метод main (). Для этого введите полное имя вручную или нажмите кнопку с многоточием и выберите нужный класс в диалоговом окне «Выбор основного класса». В диалоговом окне «Выбор основного класса» вы можете найти нужный класс одним из следующих способов:
  3. Перейдите на вкладку «Проект» и выберите класс с методом main () в виде дерева проекта.
  4. Перейдите на вкладку «Поиск по имени» и начните вводить имя класса. По мере ввода список доступных классов сужается, чтобы соответствовать вашей записи. Нажмите OK или нажмите Enter, когда будете готовы.
  5. В поле параметров виртуальной машины введите необязательные аргументы виртуальной машины, например размер кучи, параметры сборки мусора, кодировку файлов и т. Д. Если строка аргументов виртуальной машины слишком длинная, нажмите /help/img/idea/2017.2/editorIcon.gif и введите текст в диалоговом окне редактора.
  6. В поле Параметры программы введите необязательный список параметров, которые должны передаваться методу main () через массив его аргументов.
  7. В поле Рабочий каталог укажите текущий каталог, который будет использовать ваше приложение во время работы.
  8. В поле Использовать classpath и SDK модуля выберите нужный модуль из списка модулей, существующих в проекте.

Источники: https://www.jetbrains.com/help/idea/setting-configuration-options.html.

Автор: Damián Rafael Lattenero Размещён: 09.11.2017 12:14

0 плюса

2704 Репутация автора

Увеличение размера стека, вероятно, будет недостаточно, за исключением очень маленьких изображений, поэтому вы можете вместо этого перейти на итеративный алгоритм. Один простой вариант - создать Deque, в который вы вводите координаты, а затем вытаскиваете их, что-то вроде следующего псевдокода:

Deque<Point> queue = new ArrayDeque<>();
queue.add(new Point(x, y));
while (!queue.isEmpty()) {
    Point pt = queue.poll();
    // then do the same thing you were already doing, except use pt.x and pt.y,
    // and add new points to the queue instead of recursive calling 
}
Автор: xs0 Размещён: 09.11.2017 04:59
Вопросы из категории :
32x32