2014-11-26 5 views
1

Когда я удаляю элемент, я удаляю его из массива, затем печатаю сообщение о том, что оно было удалено.Почему я не могу удалить элемент из этого массива?

Я знаю, что, поскольку массив не отсортирован, самый простой способ удалить элемент - это просто переместить текущий последний элемент на свое место, а затем уменьшить количество элементов.

Что я сделал не так? Как я могу это исправить?

public static int removeBall(String[] hookPotentialArray, String[] nameBallArray, int[] ballWeightArray, int count) { 
    Scanner keyboard = new Scanner(System.in); 
    System.out.println("Please enter the name of the ball you would like to remove: "); 
    String name = keyboard.nextLine(); 
    boolean ballRemoval = false; 
    for (int i = 0; i < count; i++) { 
     if (name.compareToIgnoreCase(nameBallArray[i]) == 0 && !ballRemoval) { 

      nameBallArray[i] = nameBallArray[count - 1]; 
      ballWeightArray[i] = ballWeightArray[count - 1]; 
      hookPotentialArray[i] = hookPotentialArray[count - 1]; 

      ballRemoval = true; 
      count--; 

      System.out.println("The ball you selected to be removed " 
        + "has been removed."); 
      System.out.println(""); 
     } 
    } 
    return count; 
} 
+4

Поскольку Java массивы не являются динамическими, у меня ** нет ** идея, что вы просите. –

+1

В чем проблема? Разве это не компилируется, не рушится ли, работает ли оно, но не имеет ожидаемого поведения, что? –

+0

@letsjak В вашем [предлагаемом редактировании] (http://stackoverflow.com/review/spected-edits/6327428) на этот вопрос вы попытались заменить букву '' '' символом символа HTML. В общем, вам не нужно это делать, поскольку это уменьшает читаемость при редактировании сообщения. – APerson

ответ

1

Было бы лучше создать Ball класс для хранения имен, веса и зацепить потенциальные значения, и использовать List для хранения Ball объектов. List s также имеют свои собственные методы для добавления и удаления элементов.

1

(1) вы должны использовать перерыв, чтобы выйти из Поиска

(2) следует добавить специальную проверку при удалении последнего элемента

(3) вы должны помнить, что Java массив не будет сокращаться на самом деле, так что вы должны вести учет всегда правильно и в использовании

как следующее:

package tests.StackOverflow; 

public class q27159679 { 

    public static void main(String[] args) { 

     String[] hookPotentialArray = {"alpha", "beta", "gamma", "delta"}; 

     String[] nameBallArray = {"A", "B", "C", "D"}; 

     int[] ballWeightArray = {11, 12, 13, 14}; 

     int count = hookPotentialArray.length; 

     printBalls(nameBallArray, count); 

     count = removeBall(hookPotentialArray, nameBallArray, ballWeightArray, count, "B"); 

     count = removeBall(hookPotentialArray, nameBallArray, ballWeightArray, count, "D"); 


    } 


    public static int removeBall(String[] hookPotentialArray, String[] nameBallArray, int[] ballWeightArray, int count, String name) { 

     System.out.println("Removing ball " + name); 

     for (int i = 0; i < count; i++) { 
      if (name.compareToIgnoreCase(nameBallArray[i]) == 0) { 

       if(i < count - 1) { 
        nameBallArray[i] = nameBallArray[count - 1]; 
        ballWeightArray[i] = ballWeightArray[count - 1]; 
        hookPotentialArray[i] = hookPotentialArray[count - 1]; 
       } 

       count--; 

       System.out.println("The ball you selected to be removed " 
         + "has been removed."); 
       printBalls(nameBallArray, count); 
       System.out.println(""); 

       break; 
      } 
     } 
     return count; 
    } 

    public static void printBalls(String[] nameBallArray, int count) { 
     System.out.print("The remaining balls: "); 
     for(int i=0; i<count; ++i) { 
      System.out.print(nameBallArray[i] + " "); 
     } 
     System.out.println(""); 
    } 



} 
Смежные вопросы