如何用整数字符和符号重新排列数组的元素?

时间:2019-04-07 10:44:34

标签: java arrays

我有一个

形式的数组
{1, a, D, 3, h, 2, C, Z, $, o, 5}

结果数组应为

{1, 3, 2, 5, a, h, o, D, C, Z, $}

重新排列的数组应首先包含数字,然后是小写字母,然后是大写字母,最后是特殊字符,而无需使用另一个数组。

先谢谢你...

private static void arrangeArrayInOrder(List<Character> arr) {
        for (int i = 0; i < arr.size(); i++) {
            if (arr.get(i) >= '0' && arr.get(i) <= '9') {
                arr.add(arr.get(i));
                arr.remove(i);
            }
        }
    }

首先,我尝试将所有整数最后移到数组中,并将其从原始位置删除,并尝试在剩余条件下执行相同操作。.但是卡在这里本身无法继续进行。

1 个答案:

答案 0 :(得分:0)

我已经阐明了自己的逻辑,它的工作原理如下:

  • 首先计算那里有numbers, small, capitals and special个字符。
  • 设置每种类型的起始索引。
  • 启动For-loop并开始将其插入正确的位置。

工作代码:

public class stackLong
{
    static char[] array = {'1', 'a', 'B', '2', 'h', '3', 'C', 'Z', '$', 'o', '5'};
    public static void main(String[] args) 
    {
        int number=0,small=0,capital=0,special=0;
        //calculates the total number of characters of each type
        for(int i =0; i<array.length;i++)
        {
            if (array[i]>=65 && array[i]<=90)  // capital
                capital++;
            else if (array[i]>=97 && array[i]<=122) //small
                small++;
            else if (array[i]>=48 && array[i]<=57)  // number 
                number++;
            else if ((array[i]>0 && array[i]<=47)||(array[i]>=58 && array[i]<=64)|| (array[i]>=91 && array[i]<=96)||(array[i]>=123 && array[i]<=127))
                special++;
        }

        // sets their starting index
        int smallIndex = number;
        int capitalIndex = small + smallIndex;
        int specialIndex = capitalIndex + capital;
        number = 0;

        for(int i =0; i<array.length;i++)
        {
            if (array[i]>=48 && array[i]<=57)  // number
            {
                swap(i,number);
                number++;
            }
        }

        for(int i =smallIndex; i<array.length;i++)
        {
            if (array[i]>=97 && array[i]<=122) //small
            {
                swap(i,smallIndex);
                smallIndex++;
            }
        }

        for(int i =capitalIndex; i<array.length;i++)
        {
            if (array[i]>=65 && array[i]<=90)  // capital
            {
                swap(i,capitalIndex);
                capitalIndex++;
            }
        }

        for(int i =specialIndex; i<array.length;i++)  // special
        {
            if ((array[i]>0 && array[i]<=47)||(array[i]>=58 && array[i]<=64)|| (array[i]>=91 && array[i]<=96)||(array[i]>=123 && array[i]<=127))
            {
                swap(i,specialIndex);
                specialIndex++;
            }
        }

        System.out.printf("\n");
        for(int j =0; j<array.length;j++)
        {
            System.out.printf(array[j] + " ");
        }
    }

    public static void swap(int frst, int scnd)
    {
        char temp = array[frst];
        array[frst] = array[scnd];
        array[scnd] = temp;
    }
}

注意::有几种方法可以做到这一点,这似乎有些天真,但是在面试过程中,他们只是想知道您是否走上了正确的道路,以寻求超越常规的解决方案。灌木丛。