簡體   English   中英

為什么我不能正確地從此陣列中刪除一個項目?

[英]Why can't I properly remove an item from this array?

刪除項目時,將從陣列中刪除它,然后打印一條消息,指出該項目已被刪除。

我知道,由於數組未排序,因此刪除項目的最簡單方法是將當前的最后一個項目移到其位置,然后減少項目數。

我做錯了什么? 我該如何解決?

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;
}

最好創建一個Ball類來存儲名稱,權重和潛在值,並使用List來存儲Ball對象。 List也有自己的添加和刪除項目的方法。

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



}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM