我需要一些帮助。最近开始学习编程,我遇到了我遇到问题的任务。任务是:有两个对象数组和步骤数。目标是合并它们然后在每个步骤中如果来自不同阵列的两个对象相遇,则交换它们,但它们每个只朝向一个方向。我不需要实现,只需要帮助算法。
array 1: A,B,C array 2: 1,2,3 (Those two arrays can be larger than 3 objects each and don't have to be same length) merged array: A,B,C,1,2,3 number of steps:5
步骤1:A,B,1,C,2,3
步骤2:A,1,B,2,C,3
步骤3:1,A,2,B,3,C
步骤4:1,2,A,3,B,C
步骤5:1,2,3,A,B,C
我的尝试是:
public void Move(int steps)
{ for (int i = 0; i<steps; i++)
{for (int j = 0; j<mergedArray.size()-1; j++){
if (!mergedArray.get(j).getType().equals(mergedArray.get(j+1).getType()))
{ Collections.swap(mergedArray, j, j+1);
j++;
}
}
}
但这只适用于一半的步骤。
感谢您的帮助!
编辑:修复代码中的数组边界
答案 0 :(得分:0)
我发现的一个问题是你的for循环会遇到麻烦。您已获得for(int j = 0; j < mergedArray.size(); j++) { ... }
,并且在循环内部有mergedArray.get(j+1)
,因此如果您不小心,您可以快速点击ArrayOutOfBoundsException
。除此之外,看起来合理,我实现了一个类似的,它应该分割东西。
答案 1 :(得分:-1)
它不是最快的算法但应该有效。 你有2个循环:
第一:你迭代单位达到步数,你在这里有一个很好的实现。 第二:在数组遇到的元素之后,你需要在这个循环中停止迭代。使用继续。