我必须编写一个方法,该方法接受字符串数组作为参数,并以成对的方式切换值的顺序。
我使用了“ 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"}
答案 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。然后,您想交换条目i
和i+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)
您可以通过考虑可能收到的不同输入情况来系统地处理此问题。一些简单的情况是:
[]
["a"]
["a", "b"]
一些稍微复杂的例子可能是:
["a", "b", "c"]
["a", "b", "c", "d"]
现在您可以说其中两个琐碎的情况已经涵盖了奇数和偶数情况,但是我决定将其包括在内以显示更具体的示例。
让我们翻阅一小部分示例,看看调用swapPairs
之后会得到什么。
["b", "a"]
。["b", "a", "c"]
,因为这是唯一可能的交换,并且"c"
没有其他可以交换的字符串。["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;
}
}