为了账号安全,请及时绑定邮箱和手机立即绑定

复制数组的后半部分

复制数组的后半部分

哆啦的时光机 2023-10-13 14:48:57
我想创建一个以数组和布尔值作为参数的函数。布尔值告诉函数是否要包含数组除法的其余部分。然后它返回一个新数组,它是第一个数组后半部分的副本: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;
查看完整描述

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;

}


查看完整回答
反对 回复 2023-10-13
?
潇湘沐

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]


查看完整回答
反对 回复 2023-10-13
  • 2 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信