2013-04-22 194 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]