有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

我尝试使用Swing创建迷你应用程序。 此时,它包含了主窗口和其中的圆圈,当我点击圆圈时,它消失了

当圆消失时,应将其从阵列中移除。我不知道怎么做

代码如下: 带有对象的数组

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的情况下从数组中删除对象


共 (2) 个答案

  1. # 1 楼答案

    像这样工作:

       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. # 2 楼答案

    和其他人一样,我推荐一个大多数用例的列表,但您已经给出了不使用该列表的原因

    我不知道为什么会这样。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,以便它们正确匹配