当前位置: 首页 > 知识库问答 >
问题:

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

景明诚
2023-03-14

所以基本上没有能够/允许创建一个新数组。无法返回任何内容,但实际上更改和操作当前数组。您如何使用字符数组并简单地翻转/反转它们。

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);
       }
     }
   }

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

注意:这是在此处的在线采访中尝试的:在此处输入链接描述

共有3个答案

邓星光
2023-03-14

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

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

这就是代码;

java prettyprint-override">
    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));
    }

编辑:我刚刚看到您要求将每个单词在字符[]中倒转,您可能希望在第一句话中澄清这一点

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

翟聪
2023-03-14

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

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;
}
况承福
2023-03-14

这绝对不是一个好的解决方案,但它是一个可行的解决方案。

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);

}}
 类似资料:
  • 整个夏天我都在尝试练习java,但我被这个问题困住了。我需要在Java中交换整数中的2个字母。例如,在main方法中,我创建了一个名为swapdigits的方法,参数为1432。程序应该交换4和1以及3和2。输出应该是4123,因为它按顺序交换了这两个字母。假设我做swapdigits(1341234),输出应该是3114324。我知道我必须使用while循环,但我在交换上卡住了。 这是我目前所掌

  • 我正在制作一个minecraft插件,当服务器启动时,只要字符串能力等于“是”,它每5秒做一个动作,当你键入 /nameme-enable时,它将其设置为是, /nameme-disable将其设置为否。然而,我似乎无法更改字符串值,我看到另一个人7年前问了另一个问题,但它返回为他的,字符串并添加另一个值,而他的是在一个方法中,这是命令的代码...

  • 问题内容: 我使用以下代码将Object数组转换为String数组: 但是我想知道是否还有另一种方法可以做到,例如: 但这会导致运行时错误: 正确的方法是什么? 问题答案: 另一种替代方法:

  • 我使用以下代码将对象数组转换为字符串数组: 但我想知道是否有另一种方法可以做到这一点,比如: 但这将导致运行时错误:<code>线程“AWT-EventQueue-0”java.lang.ClassCastException中的异常:[Ljava.langs.Object;无法强制转换为[Ljava.lang.String; 正确的做法是什么?

  • 问题内容: 我想将a转换为Character类的对象数组,但无法执行转换。我知道我可以使用该方法将String转换为原始数据类型类型为“ char”的数组,但这无助于将String转换为Character类型的对象数组。 我将如何去做? 问题答案: 用这个:

  • 问题内容: 我有一个一维String数组,我想将其转换为一维字节数组。我该怎么做呢?这需要ByteBuffer吗?我怎样才能做到这一点?(字符串可以是任意长度,只想知道如何执行这样的操作。将其转换为字节数组后,如何将其转换回String数组? -担 问题答案: 数组到数组 ,应该 手动 将其转换为两边,但是如果只有一个String,则可以和; 像这样 对于string []中的一个字节[],您必须