有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在Java中交换字符数组(就地)

因此,基本上没有能力/允许创建新阵列。无法返回任何内容,只能实际更改和操作当前数组。如何获取字符数组并简单地翻转/反转它们

Starting array: ['P','e','r','f','e','c','t',' ','M','a','k','e','s',' ','P','r','a','c','t','i','c','e']

将每个单词按空格倒回

Reversed: ['P','r','a','c','t','i','c','e',' ','M','a','k','e','s',' ','P','e','r','f','e','c','t'] 

这就是我目前所拥有的

代码:

  class Main {
     public static void main(String[] args) {
       char[] charArr = new char[] {'P','e','r','f','e','c','t',' ','M','a','k','e','s',' ','P','r','a','c','t','i','c','e'};
       reverseCharArray(charArr);
     }


     public static void reverseCharArray() {
       int arrLength = charArr.length;
       for (int i = 0; i <= arrLength / 2; i++) {
         charArr[arrLength - i - 1] = charArr[i];
         System.out.println(charArr);
       }
     }
   }

更新: 好的,我发现的是。我需要做的是交换字符句子拼写的单词。使句子倒转

注意:这是在这里的一次在线采访中尝试的: enter link description here


共 (3) 个答案

  1. # 1 楼答案

    这肯定不是一个好的解决方案,但它是一个有效的解决方案

    class Main {
    
    public static void main(String[] args) {
        char[] charArr = new char[] { 'P', 'e', 'r', 'f', 'e', 'c', 't', ' ', 'M', 'a', 'k', 'e', 's', ' ', 'P', 'r',
                'a', 'c', 't', 'i', 'c', 'e' };
        System.out.println(charArr);
        reverseCharArray(charArr,0);
        System.out.println(charArr);
    }
    
    
    public static void reverseCharArray(char[] charArr, int sorted) {
    
    
        /* Look for last space*/
        int lastSpace = -1;
        for (int i = 0; i < charArr.length; i++) { 
            if (charArr[i] == ' ') {
                lastSpace = i; 
            }
        }
    
        /* Grab the word and move it at the beginning of the sorted array */
        for (int i = lastSpace + 1; i < charArr.length; i++) {
    
            int k = i;
    
            while (k != sorted) {
                char tmp = charArr[k-1];
                charArr[k-1] = charArr[k];
                charArr[k] = tmp;
                k--;
            }
    
            sorted++;
        }
    
    
        /* At this point, the last character is a space*/
        /* Else, we've swapped all the words */
        int k = charArr.length - 1;
        if (charArr[k] != ' ') {
            return;
        }
    
        /* If it's a space, grab it and move it at the beginning*/
        while (k != sorted) {
            char tmp = charArr[k-1];
            charArr[k-1] = charArr[k];
            charArr[k] = tmp;
            k--;
        }
        sorted++;
    
    
        /*Recursive call on the not sorted array*/
        reverseCharArray(charArr,sorted);
    
    }}
    
  2. # 2 楼答案

    下面的方法交换时间间隔。请注意,它们必须具有相同的长度

    public static char[] swap(char[] arr, int lstart, int rstart, int len){
          for(int i=lstart; i<lstart+len; i++){
            char temp = arr[i];
            arr[i] = arr[rstart+i];
            arr[rstart+i] = temp;
       }
       return arr;
    }
    
  3. # 3 楼答案

    假设您有以下数组[h, e, y, , y, o, u]你必须以一种模式工作;从外面到里面(或者反过来)。所以,[1,2,3,4,3,2,1]你必须交换1122等等。如您所见,此数组的长度为7,在本例中,所需的交换量正好为4(4与其自身交换)。要计算交换量,只需将数组长度除以2.0f即可

    现在您必须在数组中循环,交换这些索引。要计算要交换的索引,您必须在交换的位置进行检查。假设您在第二次交换,数组中2的索引是1和5,3的索引是2和4。到现在为止,你可能已经认识到了这种模式。第一个索引始终是完成的交换量,其中第二个是数组长度减去1减去完成的交换量

    这是代码

    
        public static void swap(char[] array){
            int totalSwaps = (int) Math.ceil(array.length / 2.0f);
            for(int currentSwaps = 0; currentSwaps < totalSwaps; currentSwaps++){
                char char1 = array[currentSwaps];
                int position2 = array.length - (currentSwaps + 1);
                array[currentSwaps] = array[position2];
                array[position2] = char1;
            }
            System.out.println(Arrays.toString(array));
        }
    

    EDIT:我刚才看到你要求将每个单词在一个字符[]中反转,你可能想在第一句话中澄清这一点

    这样做;我建议您使用String::split将字符串拆分为字符串[],并使用String::toCharArray将其更改为字符数组。虽然这会创建新的数组