Java排序,默认排序功能仅适用

时间:2019-07-16 05:52:28

标签: java

很抱歉打扰,我刚刚开始尝试自己学习编码。 我为自己设定了练习基础知识的任务。我应该生成随机整数以填充数组大小10,之后我必须对其进行排序,查找数组中所有整数的最小值,最大值和平均值,并确定数组中是否为25

如您所见,其想法是练习数组操作,我不应该使用内置函数。

到目前为止,我已经编写了一种将随机数分配给数组的方法,并编写了一种对它进行排序的方法(冒泡排序,因为这是我要学习的东西)。 不幸的是,如果我自己编写排序算法,则无法通过调用排序方法(mySort)对数组进行排序。

如果我使用内置函数在我的排序方法中进行排序,然后调用它,则效果很好。所以我想这意味着我的算法是错误的。 我希望你们能指导我并向我阐明我做错了什么。


    public static int randomNum;

    public static void main(String args[]) {

        generateRandomNumber(myArray);

        mySort(myArray);
        System.out.println(Arrays.toString(myArray));



    }

    private static int[] generateRandomNumber(int[] myArray) {
        Random numberGenerator = new Random(Integer.MAX_VALUE);
        for (int i = 0; i < myArray.length; i++) {
            randomNum = numberGenerator.nextInt(100);
            myArray[i] = randomNum;

        }

        return myArray;
    }

    private static void mySort(int[] myArray) {
    for (int i = 0; i < myArray.length -1; i++) {
            for (int j = 1; j < myArray.length- i -1; i++) {
                if (myArray[j] < myArray[j - 1]) {
                    int temp = myArray[j - 1];
                    myArray[j - 1] = myArray[j];
                    myArray[j] = temp;
                }
            }
        }

    }

}

如果我更改为:

 private static void mySort(int[] myArray) {
       Arrays.sort(myArray);

   }

}

效果完美

4 个答案:

答案 0 :(得分:1)

通过对mySort函数进行以下更改,您的代码将起作用:

private static void mySort(int[] myArray) {
for (int i = 0; i <= myArray.length -1; i++) {// <= instead of <
        for (int j = 1; j <= myArray.length- i -1; j++) {//j++ not i++ and do not miss =;
            if (myArray[j] < myArray[j - 1]) {
                int temp = myArray[j - 1];
                myArray[j - 1] = myArray[j];
                myArray[j] = temp;
            }
        }
    }

}

答案 1 :(得分:0)

排序代码中有几个错误。更正后的版本如下所示:

private static void mySort(int[] myArray) {
    for (int i = 0; i < myArray.length; i++) { // Removed -1
        for (int j = 1; j < myArray.length - i; j++) { // Removed -1, corrected from i++ to j++
            if (myArray[j] < myArray[j - 1]) {
                int temp = myArray[j - 1];
                myArray[j - 1] = myArray[j];
                myArray[j] = temp;
            }
        }
    }
}

不需要-1,因为在循环条件中使用的小于<)。这意味着ij永远不会超过array size - 1

答案 2 :(得分:0)

在内部循环中,您正在遍历i而不是j。修复它,它将起作用。

答案 3 :(得分:0)

这是...代码中烦人的小麻烦之一,它将困扰您

首先非常仔细地观察...。

for (int i = 0; i < myArray.length -1; i++) {
    for (int j = 1; j < myArray.length- i -1; i++) {

看不到?仔细看第二行...

for (int j = 1; j < myArray.length- i -1; i++) {

j总是 1 ...但是为什么?因为您在两个循环中都增加了i?

如果将更改为更类似的内容...

for (int i = 0; i < myArray.length -1; i++) {
    for (int j = 1; j < myArray.length- i -1; j++) {

您应该找到它可以解决问题