[英]Copy values from a larger size array to a smaller size array in Java
我有一個包含這些值的數組: {0, 1, 3, 2, 3, 0, 3, 1}
我想調用一個靜態 void remove() 函數,該函數從原始數組中刪除所有 #3 值。 我創建了一個新數組,並且具有較小的數組大小,以適合我需要復制的數字。 我循環遍歷兩個數組以復制非 #3 值,但不斷獲取ArrayIndexOutOfBoundsException
,其中last destination index 6 out of bounds for int[5]
我相信這個邏輯是正確的,本質上,您如何將值從較大的數組復制到較小的數組? 我是否缺少另一個數組來復制值?
import java.util.Arrays;
public class Main {
public static int[] remove(int v, int[] in) {
int size = 0;
for (int i=0; i<in.length; i++) {
if (in[i] != v) {
size++;
}
}
int[] pushArray = new int[size];
for (int j=0; j<pushArray.length; j++) {
for (int i=0; i<in.length; i++) {
if (in[i] == v) {
continue;
} else {
System.arraycopy(in, in[i], pushArray, pushArray[i], pushArray.length);
}
}
}
return pushArray;
}
public static void main(String args[]) {
System.out.println("Values from array: ");
int[] intArray = new int[] {0, 1, 3, 2, 3, 0, 3, 1};
System.out.println(Arrays.toString(intArray));
int v = 3;
System.out.println("Removing all values of " + v + " from array above ^");
int[] newArray = remove(v, intArray);
System.out.println(Arrays.toString(newArray));
}
}
System.arraycopy不會將一個元素從一個數組復制到另一個,它
從指定的源數組復制一個數組,從指定位置開始,到目標數組的指定位置。數組組件的子序列從 src 引用的源數組復制到 dest 引用的目標數組。 復制的組件數等於長度參數。 源數組中位置 srcPos 到 srcPos+length-1 處的組件分別復制到目標數組的位置 destPos 到 destPos+length-1。
意味着它從源數組中復制連續的元素,從 srcPos 開始,並將它們按照它們所在的順序放入目標數組中,從 destPos 開始。
您可以通過簡單地將 pushArray[j] 的值設置為 in[i] 來完成您想要做的事情,而無需嵌套循環:
public static int[] remove(int v, int[] in) {
int size = 0;
for (int i = 0; i < in.length; i++) {
if (in[i] != v) {
size++;
}
}
int[] pushArray = new int[size];
int j = 0;
for (int i = 0; i < in.length; i++) {
if (in[i] != v) {
pushArray[j++] = in[i];
}
}
return pushArray;
}
輸出 :
Values from array:
[0, 1, 3, 2, 3, 0, 3, 1]
Removing all values of 3 from array above ^
[0, 1, 2, 0, 1]
嘗試這個。
public static int[] remove(int v, int[] in) {
return IntStream.of(in)
.filter(i -> i != v)
.toArray();
}
public static void main(String[] args) {
int[] in = {0, 1, 3, 2, 3, 0, 3, 1};
int[] out = remove(3, in);
System.out.println(Arrays.toString(out));
}
輸出:
[0, 1, 2, 0, 1]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.