java - Java 中的快速排序(比较)

标签 java nullpointerexception quicksort compareto

这个程序无法运行,但我不知道为什么:

抽象类

public class Mahasiswa implements Comparable {

    private String nama;
    private int nim;

    public Mahasiswa(String nama, int nim) {
    }
    public String getNama() {
        return nama;
    }
    public int getNim() {
        return nim;
    }
    public void setNama() {
        this.nama=nama;
    }
    public void setNim() {
        this.nim=nim;
    }

    @Override
    public int compareTo(Object o) {
        Mahasiswa key = (Mahasiswa) o;
        if (this.nama.compareTo(key.getNama()) == 0) {
            return -1;
        }else if (this.nama.compareTo(key.getNama()) > 0) {
            return 1;
        }else{
            return 0;
    }
    }
}

方法类:

        public static Mahasiswa[] BubbleSort(Object[] object) {
        Mahasiswa[] data =(Mahasiswa[]) object;
        for (int i = 1; i < data.length; i++) {
            for (int j = 0; j < data.length - i; j++) {
                if (((Comparable)data[j]).compareTo(data[j+1]) ==1 ) {
                    Mahasiswa c = data[j];
                    data[j] = data[j + 1];
                    data[j + 1] = c;
                }
            }
        }
        return data;
    }

主类

    public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Mahasiswa[] data = {new Mahasiswa("Karel", 175314105),
        new Mahasiswa("Fandur", 175314006),
        new Mahasiswa("Yeski", 1753141104),
        new Mahasiswa("Tiosu", 175314001),
        new Mahasiswa("Jono", 175314090)};

        Larik.BubbleSort(data);

        for (int i = 0; i < data.length; i++) {
            System.out.println(data[i].getNama()+" "+data[i].getNim());
        }
    }
}

输出

Exception in thread "main" java.lang.NullPointerException
at SortingObject.Mahasiswa.compareTo(Mahasiswa.java:33)
at SortingObject.Larik.BubbleSort(Larik.java:16)
at SortingObject.Main.main(Main.java:24)
C:\Users\Yeski's Legion\AppData\Local\NetBeans\Cache\8.2\executor- snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)

最佳答案

您必须在构造函数或 setter 中设置实例变量值,否则将为 null。

public Mahasiswa(String nama, int nim) {
  this.nama = nama;
  this.nim = nim;
}

您还可以使用 setter 方法。

关于java - Java 中的快速排序(比较),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52914081/

相关文章:

java - 当我尝试运行 JFrame 时,为什么会收到 NullPointerException?

java - 识别 JFlex 1.4.3 中的小数

java - 如何使用类型删除来使用继承方法?

java - 带有空指针异常的Android setonclicklistener

java - 程序与 CountDownTimer 配合得很好,直到还剩 3 秒,然后它调用两次

c - 使用修改的快速排序从数组中选择 k 个最小元素时出现运行时错误

python - Numpy argsort 不稳定性

java - 使用 $or 和 $in 在 Java 中创建 mongodb 查询

JavaFX 如何在一个注册表中组合多个事件处理程序?

c++ - 使用 double 值实现快速排序