2013-04-22 158 views
0

在下面的代码中,如果数组的大小大于20,我试图从数组中移除20之后的任何东西。在我的循环中,我有userinput.remove(20 + i);但是,我得到它无法找到符号删除?我不确定为什么它会这样做,如果error.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); 

      } 
     } 

回答

0

定义不能调用remove数组。你不能改变数组的大小。但是你可以说元素设置为null

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

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

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

3

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

  • 使用List代替,如ArrayList你已经使用了error
  • 创建一个更短的1个元素的新数组,并复制除您尝试删除的元素以外的所有内容。
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(...)不适用于数组。

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]