2 回答
TA贡献1772条经验 获得超5个赞
为了找到 的大小vector_2,我决定使用复合赋值运算符。size因此,该解决方案的第一部分检查所需的条件并在单个语句中分配一个值。
由于我们知道要迭代循环多少次,因此我认为循环for比循环更合适while。
vector该循环检索从数组中间到数组末尾的所有值,并将每个值放入 中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条经验 获得超6个赞
人们已经暗示过System#arraycopy
,但是Arrays.copyOfRange
还有一种更简单的方法,您只需定义正确的起始索引并直接接收副本即可。
起始索引是array.length / 2
默认的。如果include
标志是true
,那么您必须将数组长度除以 2 的余数添加到其中。
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]
添加回答
举报