亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

復制數組的后半部分

復制數組的后半部分

哆啦的時光機 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 關注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號