-3

我正在编写一个程序,它排列数组中的元素,最大值位于最后,然后随着它们在数组中向后移动而减小大小。我可以将它们排列成最小的,依此类推,但我想看看我是否可以反过来做。下面是我的代码。它在第一次迭代之后不起作用。任何人都可以帮助我。

import java.util.Scanner;//Importing scanner class.
import java.util.Arrays;//Importing the array class.

{
    public static void main(String[] args) 
    {
         double [] numbers= {5,3,6,4,1};
         double currentMax;
         int currentMaxIndex;
         int i,j,k;

       //  Scanner input = new Scanner(System.in);//Creating a scanner.

         //The below lines are used to ask the user to enter 10 numbers.

        /* for (k = 0;k<numbers.length;k++)
         {
             System.out.print("Enter number " + k +" : ");
             numbers[k]=input.nextDouble();
         }//end of for loop.
         */
         for(i=numbers.length-1;i>1;i--)
         {
             currentMax=numbers[i];
             currentMaxIndex=i;

             for(j=numbers.length-2;j>0;j--)
             {
                 if(currentMax<numbers[j])
                 {currentMax=numbers[j];
                 currentMaxIndex=j;
                 }
             }
             if(currentMaxIndex!=i)
             {
                 numbers[currentMaxIndex]=numbers[i];
                 numbers[i]=currentMax;
             }
         }
    System.out.print("The sorted new array is:\n");
    for(i=0;i<numbers.length;i++)
    {
        System.out.print(numbers[i]+" ");
    }
    }
}
4

2 回答 2

1

尽管它不能直接回答您的问题,但它确实提供了一种合理的替代方法。

重构您的代码如下:

第 1 步:删除所有代码

第 2 步:改为输入:

Arrays.sort(numbers);
于 2013-10-26T00:24:52.953 回答
0

显然有更好的排序方法,但我认为这应该修复您的代码:

外循环应该检查 fori >= 1和内循环 for j >= 0

于 2013-10-26T00:31:46.517 回答