从数组错误中删除元素

时间:2013-04-22 20:58:17

标签: java arrays string arraylist joptionpane

在下面的代码中,如果数组的大小大于20,我试图从数组中删除20之后的任何内容。在我的循环中,我有userinput.remove(20 + i);但是,我发现它找不到符号删除?如果error.add本身正在工作,我不确定为什么会这样做。

用户输入在代码前面定义

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);

            }
        }

5 个答案:

答案 0 :(得分:3)

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

  • 改为使用List,例如您ArrayList使用的error
  • 创建一个短1个元素的新数组,并复制除了您要删除的元素之外的所有内容。

答案 1 :(得分:0)

您无法调用remove数组。您无法更改数组的大小。但您可以将该元素设置为null

userinput[20 + i] = null;

答案 2 :(得分:0)

userinput.remove(20 + i);

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

对于大于20的索引,您可能需要将值设置为null(或)创建一个只包含前20个元素的新String数组,并丢弃userinput

答案 3 :(得分:0)

试试这个:

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这样的(List<...>)。另外,我摆脱了if声明并略微改变了你的循环,所以你不需要它。正如其他人提到的那样,.remove(...)并不适用于数组。

答案 4 :(得分:0)

如果你坚持保留String [],你可以将“脏工作”委托给现有的API方法,即Arrays.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)));
        }
    }
}

打印:

Input employees (len=21): [Jennifer, Paul, Tori, Zulema, Donald, Aleshia, Melisa, Angelika, Elda, Elenor, Kimber, Eusebia, Mike, Karyn, Marinda, Titus, Miki, Alise, Liane, Suzanne, Dorothy] 
Trimmed employees (len=20): [Jennifer, Paul, Tori, Zulema, Donald, Aleshia, Melisa, Angelika, Elda, Elenor, Kimber, Eusebia, Mike, Karyn, Marinda, Titus, Miki, Alise, Liane, Suzanne]