Ссылка на индексированные массивы

Возможный дубликат:
Проверка по индексированным массивам

Итак, у меня есть мой код, каждый раз, когда мышь нажимается, он рисует новую частицу в mouseX и mouseY и сохраняет положение в массиве, чтобы он мог обновляться до тех пор, пока ему не будет приказано остановиться, когда он достигнет нижней части экрана. То, что я хотел бы сделать, это сравнить текущую позицию с положением уже "сделанной" частицы и остановить ее раньше, если она имеет те же координаты, чтобы дать эффект суммирования, может кто-нибудь помочь мне?

    import java.awt.Point;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;

public class Control extends BasicGameState {
    public static final int ID = 1;

    public Methods m = new Methods();
    public Point[] point = new Point[(800 * 600)];

    int pressedX;
    int pressedY;
    int num = 0;
    String Build = "1.1";

    public void init(GameContainer container, StateBasedGame game) throws SlickException{
    }

    public void render(GameContainer container, StateBasedGame game, Graphics g) throws SlickException {
        for (int index = 0; index < point.length; index++) {
            Point p = point[index];
            if (p != null) {
                if (p.y >= 598) {
                    m.drawParticle(point[index].x,(point[index].y));
                } else {
                    m.drawParticle(p.x, p.y);
                    p.y++;
                }
            }
        }
        g.drawString("Particle Test", 680, 0);
        g.drawString("Build: " + Build, 680, 15);
        g.drawString("Pixels: " + num, 10, 25);
    }

    public void update(GameContainer container, StateBasedGame game, int delta) {
    }

    public void mousePressed(int button, int x, int y) {
        pressedX = x;
        pressedY = y;
        num = num + 1;
        point[num] = new Point(pressedX, pressedY);
        }

    public int getID() {
        return ID;
    }

}

2 ответа

Вы можете использовать координаты в качестве хеша и сохранять точки в HashSet, просто перегрузите хеш-функцию Point чем-то вроде x*y

Вы можете написать новый метод, который проверяет, находится ли точка в массиве с индексом меньше, чем "Индекс".

public boolean isInArray(int index)
{
    for (int index2 = 0; index2 < index; index2++)
    {
        if( (point[index2].x == point[index].x) &&
            (point[index2].y == point[index].y) )
        {
            return true;    //point(index) is previously in array
        }
    }
    return false;    //point(index) is NOT previously in array
}

Затем в цикле for..next вам нужно использовать оператор break

if (isInArray(index))
{
    //the break statement causes the program to exit the current loop
    break;
}

Тем не менее, вам может быть лучше обслужить, протестировав его в вашем методе MousePressed, чтобы избежать добавления точки к массиву в первую очередь, если он является дубликатом.

Удачи!

Другие вопросы по тегам