Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2011, 14:32   #1
X@OC
Форумчанин
 
Аватар для X@OC
 
Регистрация: 18.06.2010
Сообщений: 273
Вопрос Ближе к хвосту

Доброго времени суток

Не могу разобраться
есть метод который последовательно просматривает все элементы которые
приблизительно подходят.
Когда таких элементов 2 или N то надо выбрать ток который ближе всего к
концу массива но не последний.
Ни как не могу понять как это сделать, объясните пожалуйста.

Код:
        private ArrayList<Rectangle> circle;
        private Point2D point2d;
public int find_pos(Point2D point){
    	for (int i = 0; i < circle.size(); i++)
            if (circle.get(i).contains(point)) {
            return i;
            }
    	return 0;
    }
X@OC вне форума Ответить с цитированием
Старый 21.06.2011, 20:13   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Не совсем понятно, нужно выбрать предпоследний, в который входит точка, или можно и последний кружок, но чтобы он был не последним элементом массива?
В первом случае:
Код:
public static int findPos(Point point) {
  int last = -1;

  for (int i = circles.size() - 1; i >= 0; i--)
    if (circles.get(i).contains(point))
      if (last == -1)
        last = i;
      else
        return i;

  return last;
}
Во втором случае:
Код:
public static int findPos(Point point) {
  int lastIndex = circles.size()  - 1;

  for (int i = lastIndex - 1; i >= 0; i--)
    if (circles.get(i).contains(point))
        return i;

  if (circles.get(lastIndex).contains(point))
    return lastIndex;
  else
    return -1;
}

Последний раз редактировалось netrino; 21.06.2011 в 20:19. Причина: исправил немного.
netrino вне форума Ответить с цитированием
Старый 21.06.2011, 22:15   #3
X@OC
Форумчанин
 
Аватар для X@OC
 
Регистрация: 18.06.2010
Сообщений: 273
По умолчанию

вот в чем суть та
размеры шариков разные, когда первый едет большой шарик и поверх него
ставят маленький то этот маленький шарик не получается найти

спасибо за ваши методы, но они тоже не могут найти этот маленький шарик
X@OC вне форума Ответить с цитированием
Старый 22.06.2011, 16:22   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Ах вот оно что. В таком случае, думаю, вам нужно завести понятие слоя, или, другими словами, ввести третье измерение. Каждый объект должен обладать свойством, которое обозначает на каком слое он находится. При попытке разместить объект на другом объекте, необходимо получить индекс слоя нижележащего объекта и присвоить текущему индекс на единицу больший. При удалении, проходится по отсортированной в обратном порядке по индексу слоя коллекции объектов, таким образом объекты с наибольшим значением индекса слоя будут найдены ранее тех, что лежат под ними.
netrino вне форума Ответить с цитированием
Старый 24.06.2011, 17:04   #5
X@OC
Форумчанин
 
Аватар для X@OC
 
Регистрация: 18.06.2010
Сообщений: 273
Вопрос

спасибо большое netrino за совет

параметр добавил

тут появилась потребность int преобразовать в Point2D
пишу так ошибка
можно как то по другому преобразовать?
Код:
private static Point2D point2d;
int x=100, y=240;

point2d.setLocation(x, y);
X@OC вне форума Ответить с цитированием
Старый 24.06.2011, 17:17   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

А в чём такая необходимость?
И ошибка, видимо, NullPointerException?
Попробуйте так
Код:
private static Point2D point2d = new Point2D(100, 240);
netrino вне форума Ответить с цитированием
Старый 24.06.2011, 17:37   #7
X@OC
Форумчанин
 
Аватар для X@OC
 
Регистрация: 18.06.2010
Сообщений: 273
По умолчанию

У меня два окна
- первый где кружочки двигаю, удаляю
- во втором лежат виды кружочков(большие - маленькие) по которым можно нажимать

понятно что нажатие мышки в 2 окне добавляется кружок в 1 окно с четкими координатами int x и int y

а метод поиска сделанный на Point2D
чтобы узнать есть ли что то по этим координатам или нет
вот и приходиться преобразовывать
если есть то будет новый слой

так не хочет
Код:
Point2D point2d = new Point2D(100, 240);

Cannot instantiate the type Point2D
а вот так ошибок нет, но не работает
Код:
Point2D point2d = new Point2D() {
			
			@Override
			public void setLocation(double x, double y) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public double getY() {
				// TODO Auto-generated method stub
				return 0;
			}
			
			@Override
			public double getX() {
				// TODO Auto-generated method stub
				return 0;
			}
		};
    	point2d.setLocation(x, y);

Последний раз редактировалось X@OC; 24.06.2011 в 17:45.
X@OC вне форума Ответить с цитированием
Старый 24.06.2011, 18:44   #8
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Да, пардон, класс Point2D абстрактен.
Код:
private static Point2D point2d = new Point(100, 240);
netrino вне форума Ответить с цитированием
Старый 24.06.2011, 22:19   #9
X@OC
Форумчанин
 
Аватар для X@OC
 
Регистрация: 18.06.2010
Сообщений: 273
По умолчанию

другое дело работает

благодарю
X@OC вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить какая из двух точек - М1(х1,у1) или М2(х2,у2) - распаложенна ближе к началу координат. vano_18_RUS Помощь студентам 8 18.10.2010 23:53
Определить какая из точек находится ближе к началу координат(алгоритм ветвления). Rakfeller Паскаль, Turbo Pascal, PascalABC.NET 16 25.01.2009 02:01