Java无法找到符号get.Method但声明了Method

时间:2016-09-16 21:22:08

标签: java

我被授予这个课程并被告知修复错误并芬兰语课程。

对于此作业,您需要开发一个测试驱动程序和一个类似的类。幸运的是,富勒教授已经编写了这样的类(大部分都是这样),你只需要添加一些代码并调试一些错误。 这就是我所拥有的以及给出的东西。

public class Jedi implements Comparable {

    private String name;
    private double midi;

    public Jedi(String name, double midi) {
        this.name = name;
        this.midi = midi;
    }

    public Jedi(String name) {
        this.name = name;
        this.midi = -1;
    }

    public String toString() {
        return "Jedi " + name + "\nMidi-chlorians count : " + midi + "\n";
    }

    public double getMidi() {
        return midi;
    }

    public String getName() {
        return name;
    }

    // returns true if the object’s midi value are equal and false otherwise – CODE INCOMPLETE
    public boolean equals(Jedi other) {
        return this.getMidi() == other.getMidi();
    }

    // returns -1 if less, 1 if larger, or 0 if it is an equal midi count – CODE INCOMPLETE
    public int compareTo(Object other) {
        if (getMidi() < other.getMidi()) {
            return -1;
        } else if (getMidi > other.getMidi()) {
            return 1;
        } else if (this.equals(other)) {
            return 0;
        }
    }
}

我一直找不到符号 - 方法getMidi()

这有什么问题,因为我无法弄明白?

4 个答案:

答案 0 :(得分:2)

这是问题所在:

public int compareTo(Object other)

您已经说过可以将此对象与任何其他对象进行比较。您无法致电other.getMidi(),因为getMidi()不是Object上声明的方法。

我建议您更改类和方法声明,以使用Comparable<T>是通用的事实:

public class Jedi implements Comparable<Jedi> {
    ...
    public int compareTo(Jedi other) {
        ...
    }
}

答案 1 :(得分:0)

你的问题在这里:

public int compareTo(Object other)
{
    if (getMidi() < other.getMidi())
        return -1;
    else if (getMidi > other.getMidi())
        return 1;
    else if (this.equals(other))
        return 0;
}

otherObjectObject没有getMidi()方法。将其更改为:

public int compareTo(Jedi other)
{
    if (getMidi() < other.getMidi())
        return -1;
    else if (getMidi > other.getMidi())
        return 1;
    else if (this.equals(other))
        return 0;
}

答案 2 :(得分:0)

  
      
  1. 对象没有getMidi()方法。

  2.   
  3. 如果不满足所有if条件,返回的内容怎么办?所以请纠正。如

  4.   
       public int compareTo(Object other) {

            if (getMidi() < other.getMidi()) {
                return -1;
            } else if (getMidi > other.getMidi()) {
                return 1;
            } else if (this.equals(other)) {
                return 0;
            }
            return ....Something if conditions are not met.
        }

答案 3 :(得分:0)

您正在尝试使用您在Object类中为Jedi类定义的方法,但这不起作用。如果您需要管理具有Object类型的对象(在投射之前必须确定其类型),在使用之前必须将其强制转换为预期的对象类型(此示例为Jedi) )。

因此,您的代码类似于以下代码:

public class Jedi implements Comparable {
    private String name;
    private double midi;

    public Jedi(String name, double midi) {
        this.name = name;
        this.midi = midi;
    }

    public Jedi(String name) {
        this.name = name;
        this.midi = -1;
    }

    public String toString() {
        return "Jedi " + name + "\nMidi-chlorians count : " + midi + "\n";
    }

    public double getMidi() {
        return midi;
    }

    public String getName() {
        return name;
    }

    // returns true if the object’s midi value are equal and false otherwise – CODE INCOMPLETE
    public boolean equals(Jedi other) {
        return this.getMidi() == other.getMidi();
    }

    // returns -1 if less, 1 if larger, or 0 if it is an equal midi count – CODE INCOMPLETE
    public int compareTo(Object other) {
        if (getMidi() < ((Jedi)(other)).getMidi()) {
            return -1;
        } else if (getMidi() > ((Jedi)(other)).getMidi()) {
            return 1;
        } else if (this.equals(other)) {
            return 0;
        }
        return -1; // !!! YOU DID NOT PROVIDE THIS CASE !!!
    }
}

请注意,您的compareTo()函数包含错误,您没有为其他主分支提供return语句。