这里有多种问题:
while (sorted = false)
套sorted
到false
,然后测试结果值false
,这意味着你永远不会进入循环体在所有(不是你的问题一次)。
如果解决这个问题,你的代码将只运行while
循环体一次(从而留下数组没有排序还没有),因为你有sorted = true
作为循环体结束的无条件声明。
你需要有一个假设数组进行排序,然后,如果你发现任何证据被清除它不是,就像一个标志:
public void sortArray()
{
boolean sorted;
do
{
sorted = true; // Assume it's sorted
int temp;
for(int i = 0; i < inArray.length - 1; i++)
{
if(inArray[i] > inArray[i + 1])
{
temp = inArray[i];
inArray[i] = inArray[i + 1];
anArray[i + 1] = temp;
sorted = false; // We changed something, so assume we need to do another pass
}
}
}
while (!sorted);
}
附注:此只是一种风格的东西,但通常最好将变量的范围尽量缩小。有没有必要为temp
是for
外循环或外连if
块,移动它内的if
块
public void sortArray()
{
boolean sorted;
do
{
sorted = true; // Assume it's sorted
for(int i = 0; i < inArray.length - 1; i++)
{
if(inArray[i] > inArray[i + 1])
{
int temp = inArray[i];
inArray[i] = inArray[i + 1];
anArray[i + 1] = temp;
sorted = false; // We changed something, so assume we need to do another pass
}
}
}
while (!sorted);
}
'='是赋值,''==是平等的。这就是为什么你应该总是写'while(!sorted)'而不是。它可以保护你免受这种打字错误。 – azurefrog
*“但是我的for循环仅遍历它一次。”*不,你当前的while循环根本不会执行循环体*,因为azurefrog指出了上面的内容。如果你解决了这个问题,它将只运行一次**,因为你在循环结束时无条件地设置了'sorted = true'。 –
@azurefrog感谢您指出这一点,我在我的实际代码中实际上已将其作为'==',但在此处输入时将其搞乱。 – Bluasul