我有这个代码;

它们都使用system.out.println语句打印出数组元素。最初,我使用带有Arrays.toString(array)的return语句在主方法中显示正常工作的数组。现在,我想使用打印语句只是为了降低复杂性。如您所见,输出形式排序缺少数组中的最后一个元素,这是因为我正在使用array.length -1。但是,如果我不使用array.length -1,我会得到一个.ArrayIndexOutOfBoundsException,那么有人对此有实际的解决方案吗?

import java.util.Arrays;
public class SortMethod
{
    static int[] array = {2,1,5,3,5};


    public void sort(int[] arrays)
    {

        for(int i = 0;i < arrays.length - 1;i++ )
        {
            int store = 0;
            if (arrays[i + 1 ] < arrays[i])
            {
                store = arrays[i];
                arrays[i] = arrays[i + 1];
                arrays[i + 1] = store;

            }
            System.out.print(arrays[i]);
        }

        System.out.println();
    }

    public void reverse (int[] arrays)
    {
        for (int i=arrays.length-1; i >=0; i--)
        {
            System.out.print(arrays[i]);
        }


    }
    /**
     * @param args
     */
    public static void main(String[] args)
    {
        // TODO Auto-generated method stub

        SortMethod sort = new SortMethod();
        sort.sort(array);
        sort.reverse(array);

    }

}


输出;

From Sort:1235
From Reverse:55321

最佳答案

首先,您的排序方法实际上没有正确排序。您可以使用左端的值来检查值,但是如果列表末尾有一个4,会发生什么呢?


  {2,1,5,3,5,4}


将返回结果:


  123545


这很难排序...您将要获取切换的每个值,并向后检查它,并确保它也不小于先前的值。现在,您将值排序到右侧,但再也不会回到左侧。

您也可以只执行排序算法,然后在数组中进行迭代并随后打印值,而不是尝试在排序方法的中间打印它们:

public class TestCode
{
static int[] array = {2,1,5,3,5,4,9,1,99,7};


public void sort(int[] arrays)
{

    for(int i = 0; i < arrays.length - 1 ;i++ )
    {
        int store = 0;
        // Move larger values to the right
        if (arrays[i] > arrays[i + 1])
        {
            store = arrays[i];
            arrays[i] = arrays[i + 1];
            arrays[i + 1] = store;
            // Sort swapped smaller values to the left
            for(int j = i; j > 1; j--)
            {
                if (arrays[j] < arrays[j - 1])
                {
                    store = arrays[j];
                    arrays[j] = arrays[j - 1];
                    arrays[j - 1] = store;
                }
            }

        }
    }

    for(int i = 0; i < array.length; i ++)
    {
        System.out.print(arrays[i] + " ");
    }
    System.out.println();
}

public void reverse (int[] arrays)
{
    for (int i=arrays.length-1; i >=0; i--)
    {
        System.out.print(arrays[i] + " ");
    }


}
/**
 * @param args
 */
    public static void main(String[] args)
    {
        // TODO Auto-generated method stub

        TestCode sort = new TestCode();
        sort.sort(array);
        sort.reverse(array);

    }

}


给出输出:


  1 1 2 3 4 5 5 7 9 99
  
  99 9 7 5 5 4 3 2 1 1


摘要:

在对数组进行排序时,您需要遍历数组array.length - 1次以比较值(您无需将最后一个值与其右边的值进行比较,因为其中没有一个)。

打印数组时,您需要遍历array.length次并打印出每个值。您的主要问题来自尝试在排序算法中打印出数组,而这种情况仅在您可能只是在排序算法之外打印数组时才遍历数组array.length - 1次。

10-02 03:32
查看更多