如何在不使用ArrayList的情况下从数组中删除对象?

时间:2018-04-01 11:27:41

标签: java arrays graphics

如何在不使用ArrayList的情况下从数组中删除对象?

我尝试使用Swing创建miniaplication。 此时它包含主窗口和圆圈,周围环绕,当我点击圆圈时 - 它会消失。

当圆圈消失时,它应该从数组中删除。我不明白该怎么做。

这是代码: 带对象的数组;

Sprite[] sprites = new Sprite[10];

删除对象的方法:

private void deleteCircle(GameCanvas gameCanvas) {
    gameCanvas.addMouseListener(new MouseAdapter() {
        @Override
        public void mousePressed(MouseEvent e) {
            int x = e.getX();
            int y = e.getY();
            for (int i = 0; i <sprites.length ; i++) {
                boolean  takeDamage = x >=  sprites[i].getLeft() && x<= sprites[i].getRight() && y >= sprites[i].getTop() && y <= sprites[i].getBottom();
                if (takeDamage){
                    sprites[i].halfHeight = 0;
                    sprites[i].halfWidth = 0;
                }
            }
            for (int i = 0; i <damageSprites.length ; i++) {
                if (sprites[i].halfHeight == 0 &&  sprites[i].halfWidth == 0){
                    sprites = (Sprite[]) ArrayUtils.removeElement(sprites, i);
                }
                System.out.println(Arrays.toString(sprites));
            }
        }
    });
}

如果object.halfHeight = 0object.halfWidth = 0

应该认为它不存在,应该从数组中删除:

尝试将其删除,但这不起作用

                for (int i = 0; i <damageSprites.length ; i++) {
                if (sprites[i].halfHeight == 0 &&  sprites[i].halfWidth == 0){
                    sprites = (Sprite[]) ArrayUtils.removeElement(sprites, i);

如何在不使用ArrayList的情况下从Array中删除对象?

3 个答案:

答案 0 :(得分:0)

和其他人一样,我建议大多数用例使用List,但是你已经给出了不使用它的理由。

我不确定为什么ArrayUtils.removeElement不能为您工作,但由于您想了解数组,我将解释如何在没有辅助方法的情况下完成此操作:

int indexToRemove = 4; //the index    we're removing
Object[] newArray = new Object[array.length-1];
for(int i=0; i<array.length;i++){
     if(i<indexToRemove){
        newArray[i] = array[i];
     }
     else if(i>indexToRemove){
        newArray[i-1] = array[i];
     }
}

这循环遍历原始数组,将每个项目复制到新数组。当它命中已删除的索引时,它会跳过一个副本,然后从下一个索引继续,将索引调整为-1,以便它们正确匹配。

答案 1 :(得分:0)

像这样工作:

   for (int i = 0; i <sprites.length ; i++) {
                if (sprites[i].halfHeight == 0 && sprites[i].halfWidth == 0){
           sprites = (Sprite[]) ArrayUtils.remove(sprites, i);
      }

只是改变:

ArrayUtils.removeElement(sprites, i);

为:

ArrayUtils.remove(sprites, i);

答案 2 :(得分:-1)

你不能像这样从数组中删除元素。

首先,您必须遍历数组并找到特定元素,并将特定元素右侧的元素移位到一个位置。

并使用n-1大小的数组,其中n是数组的长度

你可以参考这个程序: -

How do I remove objects from an array in Java?

https://www.geeksforgeeks.org/delete-an-element-from-array-using-two-traversals-and-one-traversal/