java—从数组中删除最后一个元素

utugiqy6  于 2021-07-09  发布在  Java
关注(0)|答案(5)|浏览(2211)

我正试图根据方法的参数从数组中删除元素。如果参数是最后一个元素的位置,我不能使用for循环并最终指定if语句来满足这个条件。同时尝试在删除后返回该位置的当前名称。我已经测试了以下代码。
我想看看是否有更好的方法来产生同样的结果,而不需要额外的if语句。我试着查找arrays类,但没有任何静态方法似乎也有帮助。如果有更好的方法,请提供建议。谢谢。

public class ArrayTester {
    public static String[] array1 = new String[100];

    public static void main(String[] args) {
        remove(50);
        System.out.println(remove(50));
    }

    public static String remove(int name) {

        if(name == 99){
            array1[name] = null; 
            return array1[name]; 
        }

        else if (name >= 0 && name < 99){         
            for (int i=name; i < array1.length-1; i++){
                    array1[i] = array1[i+1];
            }
            return array1[name]; 
        }
        return null;  
    }
}
wsewodh2

wsewodh21#

还有arraylist??

import java.util.ArrayList;

public class RemoveArrayListElement {

    public static void main(String[] args) {

        ArrayList<String> arlist=new ArrayList<String>();

        //<E> it is return type of ArrayList

        arlist.add("First Element"); // adding element in ArrayList
        arlist.add("Second Element");
        arlist.add("Third Element");
        arlist.add("forth Element");
        arlist.add("fifth Element");

        // remove array list element by index number
        arlist.remove(3);

        // remove ArrayList element by Object value
        arlist.remove("fifth Element");

        // get elements of ArrayList 
        for(int i=0;i<arlist.size();i++)
        {
            System.out.println("ArrayList Element "+i+" :"+arlist.get(i));
        }
    }
}

输出:

Remove ArrayList Element 0 :First Element
Remove ArrayList Element 1 :Second Element
Remove ArrayList Element 2 :Third Element

使用arraylist更容易,不是吗?

x759pob2

x759pob22#

看看你的代码,你似乎想要这样的东西-

if (name == 99) {
  try {
    return array1[name]; 
  } finally {
    array1[name] = null; 
  }
}
t3psigkw

t3psigkw3#

array1 = Arrays.copyOf(array1, 99);
q35jwt9p

q35jwt9p4#

我觉得你最好还是用数组列表。数组并不是为你所做的事情而设计的。但是您也可以在所需的位置将值设置为null,然后在数组上运行java.util.arrays.sort方法。类似于这样的事情(我正在做,但这很接近):

public static String remove(int name) {

    String returnValue = array1[name];
    array1[name] = null;
    java.util.Arrays.sort(array1);
    return returnValue;

}

这将给您留下一个排序数组,但您已经将它们从原始索引中移出了,所以这对您来说可能重要,也可能不重要。
另一种选择是简单地添加 if (array1[index] != null) 条件到处理该数组的所有代码。这样就不必在数组中来回移动值,代码只需跳过它运行到的任何空值。

g2ieeal7

g2ieeal75#

通过排除 if . 不幸的是,循环必须保持-数组提供连续存储,因此如果要删除数组中间的项,则需要移动数据。

public static String remove(int index) {
    // Note the use of "index" instead of "name"
    if (index < 0 || index >= array1.length) {
        // A more common approach is to throw an exception,
        // but your code returns null for out-of-range index
        return null;
    }
    for (int i = index; i < array1.length-1 ; i++) {
        array1[i] = array1[i+1];
    }
    // Unconditionally set null in the last element of the array
    array1[array1.length-1] = null;
    return array1[index]; 
}

相关问题