簡體   English   中英

為什么我的Arraylist繼續打印[3,2]?

[英]Why does my Arraylist keep printing [3,2]?

我正在嘗試從整數數組中刪除值的每個實例,並返回新整數數組的長度。輸入為[3,2,2,3],val為3。輸出應為[ 2,2],長度為2。我一直得到[3,2],但是我正在通過數組刪除val。

    class Solution {
        public int removeElement(int[] nums, int val) {

            ArrayList<Integer> list = new ArrayList<Integer>(); 

            for(int i = 0; i < nums.length; i++) {
            list.add(nums[i]);
            }

            if(list.isEmpty()) {
            return 0;
            }

            for(int i = 0; i < list.size(); i++) {
                if(list.get(i) == val) {
                list.remove(i);
                }
            }
            return list.size();
        }
   }

當您刪除前三個時,您將擁有i = 0,下一個數組列表將調整大小,因此刪除時,您需要執行i--。

class Solution {
        public int removeElement(int[] nums, int val) {

            ArrayList<Integer> list = new ArrayList<Integer>(); 

            for(int i = 0; i < nums.length; i++) {
            list.add(nums[i]);
            }

            if(list.isEmpty()) {
            return 0;
            }

            for(int i = 0; i < list.size(); i++) {
                if(list.get(i) == val) {
                list.remove(i);
                i--;
                }
            }
            return list.size();
        }
   }

您還沒有表現出任何的印刷代碼,但我認為你打印nums基於此方法返回的數量。 這意味着你永遠不會改變nums以任何方式,只是從那里打印的第n個數字。 您需要返回修改后的數組,而不僅僅是返回長度。

您根本不需要調用remove(雖然像您一樣進行刪除,也可以,但是例如,如果您在一個foreach周期中執行此操作,則會在ConcurrentModificationException崩潰。相反,您可以確定是否將項目添加到結果列表或不在第一個for循環內(我認為這更安全):

ArrayList<Integer> list = new ArrayList<Integer>(); 
for(int i = 0; i < nums.length; i++) {
    if (nums[i] != val) {
        list.add(nums[i]);
    }
}
return list.size();

(我知道這不能直接回答您的問題)

暫無
暫無

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

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