复制数组的后半部分

我想创建一个以数组和布尔值作为参数的函数。布尔值告诉函数是否要包含数组除法的其余部分。然后它返回一个新数组,它是第一个数组后半部分的副本:


secondHalf({1, 2, 3, 4, 5}, true) → {3, 4, 5}

secondHalf({1, 2, 3, 4, 5}, false) → {4, 5}  

对于这个作业,我不应该使用任何其他类。这是我尝试过的:


static int[] secondHalf(int[] vector, boolean include) {

    int size = vector.length/2;

    if(vector.length%2 == 0)

        include = false;

    if(include)

        size ++;

    int[] vector_2 = new int[size];

    int i = 0;

    while(i < size){

        if(include)

            vector_2[i] = vector[i+size-1];

        vector_2[i] = vector[i+size+1];

        i++;

    }

    return vector_2;


哆啦的时光机
浏览 103回答 2
2回答

月关宝盒

为了找到 的大小vector_2,我决定使用复合赋值运算符。size因此,该解决方案的第一部分检查所需的条件并在单个语句中分配一个值。由于我们知道要迭代循环多少次,因此我认为循环for比循环更合适while。vector该循环检索从数组中间到数组末尾的所有值,并将每个值放入 中vector_2。static int[] secondHalf(int[] vector, boolean include) {&nbsp; &nbsp; int size = vector.length/2 + (include && vector.length%2 != 0 ? 1 : 0);&nbsp; &nbsp; int[] vector_2 = new int[size];&nbsp; &nbsp; for(int i = 0; i < size; i++)&nbsp; &nbsp; &nbsp; &nbsp; vector_2[i] = vector[vector.length - size + i];&nbsp; &nbsp; return vector_2;}

潇湘沐

人们已经暗示过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]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java