我在從 Java 中的陣列中洗掉重復元素時遇到問題。我做了兩個額外的函式,一個計算有多少唯一元素,另一個檢查整數是否已經在結果陣列中。一切似乎都有效,但我未能通過測驗,其中 0 應該是陣列中的第二個,但它總是在我的代碼中移到最后。我能做些什么來解決這個錯誤?
測驗儀顯示此錯誤:
預期:是 [<100>, <0>, <3>, <4>, <562>]
實際:[<100>, <3>, <4>, <562>, <0>]
到目前為止,這是我的代碼:
public static int[] removeDuplicates(int[] integers) {
int count = countUniques(integers);
int counter = 0;
int[] result = new int[count];
for (int integer : integers) {
Boolean isInArray = isInArray(result, integer);
if (!isInArray) {
result[counter] = integer;
counter ;
}
}
return result;
}
public static int countUniques(int[] integers) {
int i, j;
int count = 0;
for (i = 0; i < integers.length; i) {
for (j = 0; j < i; j )
if (integers[i] == integers[j])
break;
if (i == j)
count ;
}
return count;
}
public static Boolean isInArray(int[] integers, int targetInteger) {
for (int integer : integers) {
if (targetInteger == integer) {
return true;
}
}
return false;
}
uj5u.com熱心網友回復:
當您創建一個原始int陣列時,它默認填充為 0。您可以更改代碼以使用Integer物件陣列。這樣每個元素的默認值都將為空。
然后,您需要對 : 中的每個元素進行空檢查isInArray():
public static Boolean isInArray(Integer[] integers, int targetInteger) {
for (Integer integer : integers) {
if (integer != null && targetInteger == integer) {
return true;
}
}
return false;
}
并將您的result陣列更改為Integer[] result = new Integer[count];并回傳 Integer[] 而不是 int[]。
如果要回傳原始陣列,可以使用流并將 Integer 映射到 int。
就像是
return Arrays.stream(result).mapToInt(i-> i).toArray();
uj5u.com熱心網友回復:
您還沒有填充結果陣列,所以它的末尾將填充零。您只想遍歷已填充的部分。實作此目的的一種方法是將 counter 的值傳遞給您的isInArray方法。
public static int[] removeDuplicates(int[] integers) {
int count = countUniques(integers);
int counter = 0;
int[] result = new int[count];
for (int integer : integers) {
Boolean isInArray = isInArray(result, counter, integer);
if (!isInArray) {
result[counter] = integer;
counter ;
}
}
return result;
}
public static int countUniques(int[] integers) {
int i, j;
int count = 0;
for (i = 0; i < integers.length; i) {
for (j = 0; j < i; j )
if (integers[i] == integers[j])
break;
if (i == j)
count ;
}
return count;
}
public static Boolean isInArray(int[] integers, int integersLength, int targetInteger) {
for (int i = 0; i < integersLength; i ) {
if (targetInteger == integers[i]) {
return true;
}
}
return false;
}
uj5u.com熱心網友回復:
如果您需要從陣列中洗掉重復項,可能最簡單的做法是將陣列轉換為 a java.util.Set,然后將集合轉換回陣列。
public int[] removeDups(int[] arr) {
Set<Integer> noDups = new HashSet<>(Arrays.stream(arr).boxed().collect(Collectors.toList()));
int[] newArr = noDups.stream().mapToInt(Integer::intValue).toArray();
return newArr;
}
這簡化了流程并消除了其他問題,例如為未使用的陣列索引位置創建一個用零填充的陣列。
要計算“唯一”,請呼叫此方法,然后回傳創建的集合的大小:
public int countUnique(int[] arr) {
return removeDups(arr).length;
}
該解決方案不需要該方法isInArray;順便說一句,這不應該是公共方法。在我看來,公共方法不應該呼叫其他公共方法。原因是需求的變化可能會導致具有依賴關系的方法中斷。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/424734.html
上一篇:我需要檢查不同div中的匹配項
