Почему я не могу правильно удалить элемент из этого массива?

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
    В чем проблема? Разве это не компилируется, происходит сбой, запускается, но не имеет ожидаемого поведения, что?
Показать ещё 2 комментария
Теги:
arrays

2 ответа

1

(1) вы должны использовать break для выхода из поиска

(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("");
    }



}
1

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню