2016-11-01 23 views
0

我正在尝试使用此方法按升序对整数数组进行排序。但我的for循环仅遍历一次。Java- Sorting int array

public void sortArray() 
{ 
    boolean sorted = false; 

    while(sorted == false) 
    { 
     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 = true; 
    } 
} 

我知道它与我如何处理布尔标志有关,但我不知道如何去解决它。任何建议,将不胜感激。提前致谢。

+1

'='是赋值,''==是平等的。这就是为什么你应该总是写'while(!sorted)'而不是。它可以保护你免受这种打字错误。 – azurefrog

+1

*“但是我的for循环仅遍历它一次。”*不,你当前的while循环根本不会执行循环体*,因为azurefrog指出了上面的内容。如果你解决了这个问题,它将只运行一次**,因为你在循环结束时无条件地设置了'sorted = true'。 –

+0

@azurefrog感谢您指出这一点,我在我的实际代码中实际上已将其作为'==',但在此处输入时将其搞乱。 – Bluasul

回答

3

这里有多种问题:

  1. while (sorted = false)sortedfalse,然后测试结果值false,这意味着你永远不会进入循环体在所有(不是你的问题一次)。

  2. 如果解决这个问题,你的代码将只运行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); 
} 

附注:此只是一种风格的东西,但通常最好将变量的范围尽量缩小。有没有必要为tempfor外循环或外连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); 
} 
3

您目前正在循环结束时将您的排序设置为true。当然,如果实际上没有重新洗牌,那应该是真的。到archieve这个

一种方法是将一组分类为true,在while循环的开始,并将其设置为false,如果您发现该阵列还没有排序,你做元件的切换:

public void sortArray() 
{ 
    boolean sorted = false; 

    while(!sorted) 
    { 
     sorted = true; 
     int temp; 
     for(int i = 0; i < inArray.length - 1; i++) 
     { 
      if(inArray[i] > inArray[i + 1]) 
      { 
      sorted = false; // array is not yet sorted 
      temp = inArray[i]; 
      inArray[i] = inArray[i + 1]; 
      anArray[i + 1] = temp; 
      } 
     } 

    } 
}