如何编写成对切换值顺序的方法

时间:2019-04-22 19:27:54

标签: java

我必须编写一个方法,该方法接受字符串数组作为参数,并以成对的方式切换值的顺序。

我使用了“ For”循环,并添加了另一个变量,而不是使用“ i + 1”,因此我不会越界。该代码不适用于所有情况。
请帮助我了解问题所在:)

 public static void swapPairs (String [] txt1){
     for(int i=0; i<txt1.length-1; i++){
            int j=1;
            String word=txt1[j];
            txt1[j]=txt1[i];
            txt1[i]=word;
            j++;
        }
    }





>test #1:{"four", "score", "and", "seven", "years", "ago"}
    >>what should i get {"score", "four", "seven", "and", "ago", "years"}
    >>>what i get:{"score", "years", "four", "and", "seven", "ago"}

4 个答案:

答案 0 :(得分:1)

您只需要跳2:

public static void swapPairs (String [] txt1){
     for(int i=0; i<txt1.length-1; i=i+2){          
            String word=txt1[i+1];
            txt1[i+1]=txt1[i];
            txt1[i]=word;              
        }
    }

答案 1 :(得分:1)

如果您希望迭代对可以工作,则希望索引每转一圈增加2。然后,您想交换条目ii+1

for (int i = 0; i < txt1.length - 1; i += 2) {
    String word = txt1[i+1];
    txt1[i+1] = txt1[i];
    txt1[i] = word;
}

答案 2 :(得分:1)

您可以通过考虑可能收到的不同输入情况来系统地处理此问题。一些简单的情况是:

  • 情况1:一个空字符串数组:[]
  • 情况2:只有一个字符串的数组:["a"]
  • 情况3:具有两个字符串的数组:["a", "b"]

一些稍微复杂的例子可能是:

  • 情况4:具有奇数个字符串的数组:["a", "b", "c"]
  • 情况5:具有偶数个字符串的数组:["a", "b", "c", "d"]

现在您可以说其中两个琐碎的情况已经涵盖了奇数和偶数情况,但是我决定将其包括在内以显示更具体的示例。

让我们翻阅一小部分示例,看看调用swapPairs之后会得到什么。

  • 情况1:由于没有可交换的内容,我们希望返回一个空数组!
  • 情况2:由于只有单个元素,所以我们希望可以返回相同的字符串数组,因为没有其他字符串可以交换。
  • 情况3:此数组中只有一对字符串,因此我们希望这对字符串可以交换。我们应该返回["b", "a"]
  • 案例4:现在,数组中有奇数个字符串,我们需要至少交换一次。在不深入研究算法的情况下,我们期望返回["b", "a", "c"],因为这是唯一可能的交换,并且"c"没有其他可以交换的字符串。
  • 情况5:在这种情况下,我们数组中的字符串数为偶数,这通知我们该字符串将具有与之交换的相应字符串。我们希望返回["b", "a", "d", "c"]

希望通过讨论多个示例和不同情况的这一点,您开始对算法的外观有所了解。

让我们从案例5:["a", "b", "c", "d"]开始。数组中每个元素的相应索引为[0, 1, 2, 3]。我们希望将索引0的字符串与索引1的字符串交换。同样,我们希望将索引2的字符串与索引3的字符串交换。如果我们要循环执行,则索引增量器实际上应该增加2而不是1,因为我们要跳过交换的元素。

现在是这种情况,如果数组中的每个单个字符串都有一个要交换的对应字符串(即,偶数个元素)。我们可能遇到元素数量奇数的情况,这意味着最后一个元素不会被交换。您可能需要在实际进行交换之前进行检查,以查看元素是否存在,因为对数组的索引不正确会给您IndexOutOfBounds Exception

我将由您自己来完成代码,希望这可以使您对如何解决问题有更多的了解。

答案 3 :(得分:1)

这是就地算法,不检查边缘情况:

public static void swapPairs(String[] txt1) {
    for (int i = 1; i < txt1.length; i += 2) {
        String temp = txt1[i - 1];
        txt1[i - 1] = txt1[i];
        txt1[i] = temp;
    }
}