Java 从数组中删除元素时出错

Java 从数组中删除元素时出错,java,arrays,string,arraylist,joptionpane,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> ();

在下面的代码中,如果数组的大小大于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);

            }
        }
publicstaticvoidchecknames(字符串[]userinput){
ArrayList error=newArrayList();
如果(userinput.length>20){

对于(int i=0;i您不能调用
remove
数组。您不能更改数组的大小。但是您可以将该元素设置为
null

userinput[20 + i] = null;

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

userinput[20 + i] = null;
userinput
String[]
的数组。没有方法
remove(…)
可用于数组

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

userinput
String[]
的数组。没有方法
remove(…)
可用于数组


可能您需要将索引大于20的值设置为
null
(或者)创建一个新的
字符串
数组,只包含前20个元素,并放弃
userinput
,错误是正确的-没有针对数组的
删除
方法。您应该:

  • 改为使用
    列表
    ,如用于
    错误
    数组列表
  • 创建一个短1个元素的新数组,并复制除要删除的元素之外的所有元素

错误是正确的-没有针对数组的
删除方法。您应该:

  • 改为使用
    列表
    ,如用于
    错误
    数组列表
  • 创建一个短1个元素的新数组,并复制除要删除的元素之外的所有元素
试试这个:

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

}
publicstaticvoidchecknames(字符串[]userinput){
列表错误=新建ArrayList();
对于(inti=20;i试试这个:

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

}
publicstaticvoidchecknames(字符串[]userinput){
列表错误=新建ArrayList();

对于(inti=20;i如果您坚持保留字符串[],您可以将“脏活”委托给现有的API方法,即


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

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] 输入员工(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]如果您坚持保留字符串[],您可以将“脏活”委托给现有的API方法,即


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

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] 输入员工(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):[詹妮弗、保罗、托里、祖勒马、唐纳德、阿莱西亚、梅丽莎、安吉丽卡、艾尔达、埃利诺、金伯、尤西比娅、迈克、卡琳、马林达、提图斯、米基、艾莉丝、莉安、苏珊娜]