[英]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.