我被授予这个课程并被告知修复错误并芬兰语课程。
对于此作业,您需要开发一个测试驱动程序和一个类似的类。幸运的是,富勒教授已经编写了这样的类(大部分都是这样),你只需要添加一些代码并调试一些错误。 这就是我所拥有的以及给出的东西。
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()
这有什么问题,因为我无法弄明白?
答案 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;
}
other
是Object
。 Object
没有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)
对象没有getMidi()方法。
- 醇>
如果不满足所有if条件,返回的内容怎么办?所以请纠正。如
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
语句。