我一直在努力工作,这一点:数组中的元素交换
说我有一个数组:
int[] n = {0, 0, -1, 1, 0, 1, 1, -1, 1};
我需要能够通过数组排序,如果有一个在它之前有一个非零的零,那么它们应该交换。
例如:0, 0, -1, 1, 0, 1, 1, -1, 1
将变为:0, 0, -1, 0, 1, 1, 1, -1, 1
我一直在尝试使用for
环和if
声明没有运气做到这一点。有小费吗?
我一直在努力工作,这一点:数组中的元素交换
说我有一个数组:
int[] n = {0, 0, -1, 1, 0, 1, 1, -1, 1};
我需要能够通过数组排序,如果有一个在它之前有一个非零的零,那么它们应该交换。
例如:0, 0, -1, 1, 0, 1, 1, -1, 1
将变为:0, 0, -1, 0, 1, 1, 1, -1, 1
我一直在尝试使用for
环和if
声明没有运气做到这一点。有小费吗?
试试这个:
for (int i = 1 ; i < n.length ; i++)
if (n[i] == 0 && n[i - 1] != 0) {
int tmp = n[i - 1];
n[i - 1] = n[i];
n[i] = tmp;
}
你是正确的思维,你会需要一个for
环在其身体的if
声明。我们在这里所做的是从元素1开始遍历数组。然后检查我们当前所在的元素是否为0
和上一个元素不是0
:即if (n[i] == 0 && n[i - 1] != 0)
。如果这个条件成立,我们交换这两个元素。
如果不使用位调换,则需要一个临时变量来交换两个对象。例如:
int[] n = {...};
int temp = n[3]; // swaps n[3] and n[4]
n[3] = n[4];
n[4] = temp;
你可以在你的循环内粘贴一些东西来完成你所描述的内容。
致敬:我明白你为什么这样做。然而,我没有发布一个完整的解决方案,我只是发布了一个简单的例子,说明两个变量如何经常交换,并提出了如何使用类似技术的建议。 – jli
即使发布完整的解决方案,只要结合一些解释,我都不会看到问题。阅读[this](http://meta.stackexchange.com/questions/147100/the-homework-tag-is-now-officially-deprecated)(特别是评论)。 – arshajii
我引用[Tim Post](http://stackoverflow.com/users/50049/tim-post):“如果你不想要一个完整的审查,完整和可测试的答案,堆栈溢出不是要问的地方。 “ – arshajii
for(int i=0; i < length; i++)
{
if(i > 0 && arr[i] == 0 && arr[i-1] != 0)
{
int temp = arr[i-1];
arr[i-1] = arr[i];
arr[i] = temp;
}
}
应该工作。
投票的理由是很好的。 –
为什么不在i = 1开始你的循环,因为你的if子句在检查中的i> 0? –
的确,我可以做到这一点。但它不会使算法错误。 –
'“任何提示?”:是的 - 请[请告诉我们你试过的是什么](http://mattgemmell.com/2008/12/08/what-have-you-tried/)。我们还有什么可以猜测你可能做错了什么?我们还会如何知道您可能需要清除哪些误解? –
太好了。这里来了勺子喂食器。为什么不先等到我们看到OP首先尝试了什么? –
他们不完全是勺子喂养。我遇到的问题不是我问的问题的复制品,我只是需要类似的帮助,如果一个if语句和temp变量持有者对我解决我的实际问题有很大的帮助! 我明白为什么你有这种特殊的态度,但悬停。 感谢大家帮助,现在我只需要弄清楚为什么它会出现越界异常。 – Nicholas