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

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

java將偶數元素分配給偶數索引,將奇數分配給奇數位置,如果數字不相等,則在這些位置添加零

java將偶數元素分配給偶數索引,將奇數分配給奇數位置,如果數字不相等,則在這些位置添加零

明月笑刀無情 2024-01-25 21:58:35
我正在嘗試編寫代碼來顯示偶數元素到偶數索引和奇數到奇數索引,如果添加的數字相同,則相應地添加零。例子:x = [1,2,3,4] 輸出:2 1 4 3 x = [1 1 1 4] 輸出:4 1 0 1 0 1我達到了偶數和奇數位置,但在那之后就卡住了。下面是我的代碼。import java.util.*;class ArrayDemo3 {        public static void main(String[] args) {        Scanner s = new Scanner(System.in);        System.out.println("Enter Size of Array :: ");        int size = s.nextInt();        int[] x = new int[size];        System.out.println("Array Created having the size :: " + size);        System.out.println("Enter Elements for Array :: ");        for (int i = 0; i < size; i++) {            System.out.println("Enter element no-" + (i + 1) + " ::");            x[i] = s.nextInt();        }        System.out.println("Contents of Array ::");        for (int i = 0; i < size; i++) {            System.out.print(x[i] + "  ");        }                for (int i = 0; i < size; i = i + 1) {            int even = 0;            int odd = 1;            if (i < size && x[i] % 2 == 0) {                System.out.print("even : ");                even = even + i;                System.out.print("position" + i + " " + x[i] + "  ");            } else {                System.out.print("odd : ");                odd = odd + i;                System.out.print(i + " " + x[i] + "  ");            }            if (even < size && odd < size) {                 int temp = x[even];                 x[even] = x[odd];                 x[odd] = temp;             } else {                                    }            //System.out.print(x[i] + "  ");        }    }}
查看完整描述

3 回答

?
江戶川亂折騰

TA貢獻1851條經驗 獲得超5個贊

您可以將問題分為三部分:


首先創建兩個列表,一個包含按遇到的順序排列的偶數,另一個包含奇數:

    private static List<List<Integer>> createOddityLists(int... numbers) {

        List<Integer> numsList = Arrays.stream(numbers).boxed().collect(Collectors.toList());

        

        List<List<Integer>> numsByOddity = new ArrayList<List<Integer>>();

        numsByOddity.add(new ArrayList<>()); // List of odd numbers

        numsByOddity.add(new ArrayList<>()); // List of even numbers

        

        numsList.forEach(num -> numsByOddity.get(num % 2).add(num));

        return numsByOddity;

    }

用零 ( s) 填充兩個列表中較短的一個,0使其與另一個列表的長度相等:

    private static void padShorterList(List<List<Integer>> numsByOddity) {

        int sizeDiff = numsByOddity.get(0).size() - numsByOddity.get(1).size();

        int listIndexToBePadded = sizeDiff < 0 ? 0 : 1;

        List<Integer> padding = Collections.nCopies(Math.abs(sizeDiff), 0);

        numsByOddity.get(listIndexToBePadded).addAll(padding);

    }

最后連接兩個列表:

    private static List<Integer> joinLists(List<List<Integer>> numsByOddity) {

        List<Integer> resultList = new ArrayList<>(numsByOddity.get(1));

        for (int idx = 0; idx < numsByOddity.get(0).size(); idx++)

            resultList.add(idx * 2, numsByOddity.get(0).get(idx));

        return resultList;

    }

以下是完整的工作示例:


public class ArrayRearrangement {

    

    public static void main(String[] args) {

//      int[] result = rearrange(1, 2, 3, 4);

        int[] result = rearrange(1, 1, 1, 4);

        System.out.println(Arrays.stream(result).boxed().collect(Collectors.toList()));

    }

    

    private static int[] rearrange(int... numbers) {

        List<List<Integer>> numsByOddity = createOddityLists(numbers);

        padShorterList(numsByOddity);

        return joinLists(numsByOddity).stream().mapToInt(i->i).toArray();

    }


    private static List<List<Integer>> createOddityLists(int... numbers) {

        List<Integer> numsList = Arrays.stream(numbers).boxed().collect(Collectors.toList());

        

        List<List<Integer>> numsByOddity = new ArrayList<List<Integer>>();

        numsByOddity.add(new ArrayList<>()); // List of odd numbers

        numsByOddity.add(new ArrayList<>()); // List of even numbers

        

        numsList.forEach(num -> numsByOddity.get(num % 2).add(num));

        return numsByOddity;

    }


    private static void padShorterList(List<List<Integer>> numsByOddity) {

        int sizeDiff = numsByOddity.get(0).size() - numsByOddity.get(1).size();

        int listIndexToBePadded = sizeDiff < 0 ? 0 : 1;

        List<Integer> padding = Collections.nCopies(Math.abs(sizeDiff), 0);

        numsByOddity.get(listIndexToBePadded).addAll(padding);

    }


    private static List<Integer> joinLists(List<List<Integer>> numsByOddity) {

        List<Integer> resultList = new ArrayList<>(numsByOddity.get(1));

        for (int idx = 0; idx < numsByOddity.get(0).size(); idx++)

            resultList.add(idx * 2, numsByOddity.get(0).get(idx));

        return resultList;

    }

}

GitHub 上的完整代碼

希望這可以幫助。


查看完整回答
反對 回復 2024-01-25
?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

根據索引對元素進行排序,即如果元素是偶數,則它必須位于偶數位置,反之亦然


 int sortArrayByEvenOddIndex(int arr[]) {

     int n = arr.length;

     int res[] = new int[n];

     int odd = 1;

     int even = 0;

    

     for (int i = 0; i < n; i++) {

         if (arr[i] % 2 == 0) {

             res[even] = arr[i];

             even += 2;

         } else {

             res[odd] = arr[i];

             odd += 2;

         }

     }

     return  res;

 }


查看完整回答
反對 回復 2024-01-25
?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

使用數組我們可以做到這一點。代碼需要優化。


    public static int[]  arrangeInEvenOddOrder(int[] arr)

    {

        // Create odd and even arrays

        int[] oddArr = new int[arr.length];

        int[] evenArr = new int[arr.length];

        int oCount = 0, eCount = 0;

        // populate arrays even and odd

        for (int i = 0; i < arr.length; i++) {

            if (arr[i] % 2 == 0)

                evenArr[eCount++] = arr[i];

            else

                oddArr[oCount++] = arr[i];

        }

        int[] resArr = new int[oCount >= eCount?

                               2*oCount :  2*eCount-1];

        // populate elements upto min of the

        // two arrays

        for (int i =0; i < (oCount <= eCount?

                2*oCount : 2*eCount ); i++ )

        {

            if( i%2 == 0)

                resArr[i] = evenArr[i/2];

            else

                resArr[i] = oddArr[i/2];

        }

        // populate rest of elements of max array

        // and add zeroes

        if (eCount > oCount)

        {

            for (int i=2*oCount,j=0;i<2*eCount-1; i++)

            {

                if (i%2 == 0)

                {

                    resArr[i] = evenArr[oCount+j];

                    j++;

                }

                else

                    resArr[i] = 0;

            }

        }

        else if (eCount < oCount)

        {

            for (int i=2*eCount,j=0;i<2*oCount; i++)

            {

                if ( i%2 != 0)

                {

                    resArr[i] = oddArr[eCount+j];

                    j++;

                }

                else

                    resArr[i] = 0;

            }

        }

        return resArr;

    }


查看完整回答
反對 回復 2024-01-25
  • 3 回答
  • 0 關注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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