2013-04-22 4 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); 

userinput является массив String[]. Для массива не существует метода remove(..).

Может быть вам нужно установить значение null для индексов более чем на 20 (или) создать новый 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 s вот так (с List<...>) с левой стороны. Кроме того, я избавился от инструкции if и немного изменил ваш цикл, чтобы он вам не нужен. И, как говорили все остальные, .remove(...) не работает с массивами.

0

Если вы настаиваете на сохранении String [], вы можете делегировать "грязную работу" к существующим методам API, т.е. Arrays.copyOfRange(Object[] src, int from, int to)


Короткий, самодостаточной Correct (компилируется), пример:

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]
Смежные вопросы