我正在尝试创建自己的Bucket Sort样式,但是我的代码出现错误,我不知道如何解决。任何帮助都会很棒。我有两个类,Node和BucketSort:

public class Node {

    protected int element;
    protected Node next;

    public Node()
    {
        element = 0;
        next = null;
    }
    public Node getNext(Node n)
    {
        return next;
    }
    public void setNext(Node n)
    {
        n = next;
    }
    public void setElement(int e)
    {
        e = element;
    }
    public int getElement()
    {
        return element;
    }
}




public class BucketSort extends Node{


    public static void bucketSort(int v, int[] b) //b = the array of integers and v = number of buckets wanted.
    {
        Node[] bucket = new Node[v];  //Creating an array of type Node called bucket with v buckets.
        for (int i=0; i<=b.length; i++){
            bucket[i].setElement(b[i]);   //Loop through array of integers b, and set each element to the corresponding index of array bucket.
        return;
        }

        for (int i=0; i<=bucket.length; i++){
             //Getting the element at the indexed Node of array "bucket" and assigning it to the array "b" at location element-1. For example if the element is 3, then 3 is assigned to index 2, since it is the 3rd spot.
            b[getElement()-1] = bucket[i].getElement();
            return;
        }
        System.out.println(b);
    }

}


我在BucketSort的第16行收到以下错误,是代码:b [getElement()-1]

错误是:

无法从类型Node静态引用非静态方法getElement()。

你能告诉我如何解决这个问题吗?

谢谢

如何测试该程序?

最佳答案

问题是您误用了static关键字。我不确定您是否熟悉Java中静态方法的语义(如果不熟悉,则应该阅读有关它的全面介绍,也许starting here),但是基本思想是声明static属于该类,而不是该类的任何特定实例(对象)。特别地,static方法没有任何this指针的概念。

因此,问题在于,当您的代码本身调用getElement()时,Java会将其隐式解释为this.getElement()。但是,bucketSort()static,而getElement()属于Node的实例,因此这没有任何意义-调用getElement()到底是什么?

在特定的Node对象(如bucket[i])上调用它,它将进行编译(虽然还没有真正看到它是否可以工作)。

关于java - Java存储桶排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3714418/

10-11 10:31