从数组中移除元素出错



在下面的代码中,如果数组的大小大于20,则尝试从数组中删除20之后的任何内容。在我的循环中,我有userinput。移除(20 + i);然而,我得到的是,它找不到符号删除?我不确定为什么它这样做,如果错误。Add本身实际上在工作。

userinput在前面的代码中定义

public static void checknames(String[] userinput){
ArrayList<String> error = new ArrayList<String> ();

    if(userinput.length > 20){
        for(int i=0; i<userinput.length - 20; i++){
            error.add(userinput[20 + i]);
            userinput.remove(20 + i);}
            JOptionPane.showMessageDialog(null, "You can only enter up to 20
            employees. n The following employees exceed this limit." + error);
            }
        }

错误是正确的-数组没有这样的remove方法。你应该:

  • List代替,就像你用ArrayList代替error一样。
  • 创建一个短1个元素的新数组,并复制所有元素,除了你想要删除的元素。

不能将remove称为数组。你不能改变数组的大小。但是你可以将这个元素设置为null:

userinput[20 + i] = null;
userinput.remove(20 + i);

userinputString[]的数组。没有方法remove(..)可用于数组。

可能你需要设置值为null索引大于20(或)创建一个新的String数组只有前20个元素和丢弃userinput

试试这个:

public static void checknames(String[] userinput) {
    List<String> error = new ArrayList<String>();
        for(int i=20; i<userinput.length; i++) {
            error.add(userinput[i]);
            userinput[i] = null;
        }
        JOptionPane.showMessageDialog(null, "You can only enter up to 20
            employees. n The following employees exceed this limit." + error);
}

只是一些小改动。你应该总是这样做ArrayList s(与List<...>)在左手边。此外,我去掉了if语句,并稍微改变了循环,因此您不需要它。正如大家所提到的,.remove(...)不能处理数组。

如果你坚持保留String[],你可以将"脏工作"委托给现有的API方法,即数组。copyOfRange(Object[] src, int from, int to)


短,自包含,正确(可编译),示例:

import java.util.Arrays;
public class R {
    public static String[] trimEmployees(String[] employees, int maxSize) {
        return Arrays.copyOfRange(employees, 0, maxSize);
    }
    public static void main(String[] args) {
        String[] employees = new String[] { "Jennifer", "Paul", "Tori",
                "Zulema", "Donald", "Aleshia", "Melisa", "Angelika", "Elda",
                "Elenor", "Kimber", "Eusebia", "Mike", "Karyn", "Marinda",
                "Titus", "Miki", "Alise", "Liane", "Suzanne", "Dorothy" };
        int max = 20;
        System.out.println(String.format("Input employees (len=%d): %s ",
                employees.length, Arrays.toString(employees)));
        if (employees.length > max) {
            employees = trimEmployees(employees, max);
            System.out.println(String.format("Trimmed employees (len=%d): %s",
                    employees.length, Arrays.toString(employees)));
        }
    }
}

打印:

输入员工(len=21): [Jennifer、Paul、Tori、Zulema、Donald、Aleshia、Melisa、Angelika、Elda、Elenor、Kimber、Eusebia、Mike、Karyn、Marinda、Titus、Miki、Alise、Liane、Suzanne、Dorothy]裁减员工(len=20): [Jennifer, Paul, Tori, Zulema, Donald, Aleshia, Melisa, Angelika, Elda, Elenor, Kimber, Eusebia, Mike, Karyn, Marinda, Titus, Miki, Alise, Liane, Suzanne]

最新更新