【问题标题】:Bubble-sort with user's input = error [closed]用户输入的冒泡排序=错误[关闭]
【发布时间】:2012-10-20 07:01:35
【问题描述】:

当我尝试调用我的冒泡排序类时出现了一些错误。但我找不到它。 这是我的冒泡排序类,应该没问题:

public static void Sort2(double[] yourNumbers) {
        double swap; 
        for(int i = 0; i < yourNumbers.length-1; i++){
            for(int d = 0; d < yourNumbers.length-1; d++){
                if(yourNumbers[d] > yourNumbers[d+1]){ 
                    //swap feature
                    swap = yourNumbers[d];
                    yourNumbers[d] = yourNumbers[d+1];
                    yourNumbers[d+1] = swap;

                }
            }
        }
    }

这是我的主要方法(这里当我调用Sort2 方法时出现错误:

sort.java 类型中的方法 Sort2(double[]) 不适用于 参数(int)

        System.out.println("Size");
        int yourNumbers = scan.nextInt();
        double[] array = new double[yourNumbers];

        System.out.println("Numbers");

        for(int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
            array[i] = scan.nextDouble();

        }
            Sort2(array);

我知道这里被问了很多次,但我觉得我做错了。请问你能帮帮我吗? PS:我不允许使用ArrayList

编辑:这是我现在使用的代码。仍然无法工作: 编辑 2:在 http://www.leepoint.net/notes-java/data/arrays/70sorting.html 的帮助下,我明白了。一条线解决一切

import java.util.Scanner;

public class Bublesort{

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.println("Size");
        int yourNumbers = scan.nextInt();
        double[] array = new double[yourNumbers];

        System.out.println("Numbers");

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

       Sort2(array);
    **System.out.println(Arrays.toString(array));** 

    }
    public static void Sort2(double[] yourNumbers) {
        double swap; 
         for(int i = 0; i < yourNumbers.length - 1; i++){
                for(int d = i + 1; d < yourNumbers.length; d++){
                    if(yourNumbers[i] > yourNumbers[d]){ 
                        //swap feature
                        swap = yourNumbers[i];
                        yourNumbers[i] = yourNumbers[d];
                        yourNumbers[d] = swap;

                    }
                }
            }

    }}

【问题讨论】:

  • 你在哪里调用Sort2() 方法?我没有看到你的 main() 方法调用了它。
  • 调用 Sort2(array) 而不是 Sort2(yourNumbers);
  • 是的,谢谢我添加了 Sort2 方法
  • 您是否仍然遇到编译器错误或编码无法正常工作??
  • 不,代码有效,但代码的作用不是我想要的。当用户输入不同的双数时,它应该在 Buble-alg 的帮助下进行排序。

标签: java bubble-sort


【解决方案1】:

为了使用ArrayList,您必须导入java.util.ArrayList; 您收到错误是因为您将整数传递给您的Sort2() 函数。您需要向它传递一个双精度数组。此外,您的 sort2 函数将对数组进行排序,但您将无法引用它,因为 java 按值传递参数..您应该有您的函数 double[] sort2(double[] array) 然后返回排序后的数组。

【讨论】:

  • 哦,你的意思是你不允许使用 ArrayList 类......这对你来说是模棱两可的,我的回答仍然是你的解决方案。没有必要投反对票...
  • 但是你在参考部分错了!引用的值被传递,因此更改将影响原始数组!完美示例:Arrays.sort() 是一个 void 方法...
  • 这会打印什么
    int[] array = {3,2,1};
    Arrays.sort(array);
    for (int i = 0; i &lt; array.length; i++)
    System.out.println(array[i]);
    我的观点无关使用数组列表
  • 所有参数在java中都是按值传递的:正确!对于引用数据类型的参数,传递引用的值。所以参数是对与参数相同的对象的引用。
【解决方案2】:

错误表明您不能将int 传递给接受double[] 作为argument 的方法。

   System.out.println("Size");
        int yourNumbers = scan.nextInt();
        double[] array = new double[yourNumbers];

        System.out.println("Numbers");

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

       sort2(array);//**should work fine**

【讨论】:

  • 即使这个解决方案也不起作用。
  • 错误说明了什么??你能把你的相关代码贴在你遇到错误的地方吗??
【解决方案3】:

排序例程的更好版本应该类似于:N*(n-1) / 2 次迭代 vs n^2

         for(int i = 0; i < yourNumbers.length - 1; i++){
            for(int d = i + 1; d < yourNumbers.length; d++){
                if(yourNumbers[i] > yourNumbers[d]){ 
                    //swap feature
                    swap = yourNumbers[i];
                    yourNumbers[i] = yourNumbers[d];
                    yourNumbers[d] = swap;

                }
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2013-06-28
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多