2 回答

TA貢獻1772條經(jīng)驗 獲得超5個贊
為了找到 的大小vector_2,我決定使用復(fù)合賦值運算符。size因此,該解決方案的第一部分檢查所需的條件并在單個語句中分配一個值。
由于我們知道要迭代循環(huán)多少次,因此我認(rèn)為循環(huán)for比循環(huán)更合適while。
vector該循環(huán)檢索從數(shù)組中間到數(shù)組末尾的所有值,并將每個值放入 中vector_2。
static int[] secondHalf(int[] vector, boolean include) {
int size = vector.length/2 + (include && vector.length%2 != 0 ? 1 : 0);
int[] vector_2 = new int[size];
for(int i = 0; i < size; i++)
vector_2[i] = vector[vector.length - size + i];
return vector_2;
}

TA貢獻1816條經(jīng)驗 獲得超6個贊
人們已經(jīng)暗示過System#arraycopy
,但是Arrays.copyOfRange
還有一種更簡單的方法,您只需定義正確的起始索引并直接接收副本即可。
起始索引是array.length / 2
默認(rèn)的。如果include
標(biāo)志是true
,那么您必須將數(shù)組長度除以 2 的余數(shù)添加到其中。
MCVE:
import java.util.Arrays;
public class ArrayPartCopy
{
? ? public static void main(String[] args)
? ? {
? ? ? ? int array0[] = { 1, 2, 3, 4, 5 };
? ? ? ? System.out.println("For " + Arrays.toString(array0));
? ? ? ? System.out.println(Arrays.toString(secondHalf(array0, true)));
? ? ? ? System.out.println(Arrays.toString(secondHalf(array0, false)));
? ? ? ? int array1[] = { 1, 2, 3, 4 };
? ? ? ? System.out.println("For " + Arrays.toString(array1));
? ? ? ? System.out.println(Arrays.toString(secondHalf(array1, true)));
? ? ? ? System.out.println(Arrays.toString(secondHalf(array1, false)));
? ? }
? ? static int[] secondHalf(int[] array, boolean include)
? ? {
? ? ? ? int start = array.length / 2;
? ? ? ? if (include)
? ? ? ? {
? ? ? ? ? ? start += array.length % 2;
? ? ? ? }
? ? ? ? return Arrays.copyOfRange(array, start, array.length);
? ? }
}
輸出是
For [1, 2, 3, 4, 5]
[4, 5]
[3, 4, 5]
For [1, 2, 3, 4]
[3, 4]
[3, 4]
添加回答
舉報