使用类似的界面 Java
Using a Comparable Interface Java
我需要在我的代码中实现一个可比较的接口,这样我就可以比较 ArrayList 中的多位信息,例如高度。完成这项工作后,我需要能够在 switch 语句中调用它。我想我已经得到了类似的接口位,但是当我尝试在 switch 语句中调用它时它显示了一条错误消息。有没有人知道为什么我可以修复这个 is/how?我刚刚附上了相关代码,但如果我需要附上更多,请说明。
可比界面
public class Superhero implements Comparable<Superhero> {
public int compareTo(Superhero other) {
return Integer.compare(this.height, other.height);
}
切换语句
case 5:
System.out.println(sortMenu());
int val = input.nextInt();
switch (val) {
//HEIGHT
case 6:
System.out.println(Superhero.compareTo());
}
break;
编辑
当我运行下面添加的代码时出现错误消息:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous tree type: <any>
at heros.java.Heros.main(Heros.java:54)
Java Result: 1
编译器错误信息:
method compareTo in class Superhero cannot be applied to given types;
require: Superhero
found: no arguments
reason: actual and formal argument lists differ in length
您需要再将一个 Superhero 对象作为参数传递给 compareTo 方法。
Superhero h1 = new Superhero();
Superhero h2 = new Superhero();
您需要像下面这样调用 compareTo 方法
h1.compareTo(h2);
actual and formal argument lists differ in length
错误清楚地表明您需要传递必需的参数(Superhero
的对象)以使其在下面的代码中工作。
System.out.println(Superhero.compareTo());
如下所示,不带参数的compareTo() method from the Comparable interface takes a generic as parameter. compareTo()不存在。
public int compareTo(T o)
解决方案
Superhero.compareTo(otherSuperheroObject);
您正在像 Superhero class 的静态方法一样使用 compareTo。您必须在一个 Superhero 实例上调用它才能与另一个实例进行比较。
Superhero superhero1 = new Superhero();
superhero1.setHeight(10);
Superhero superhero2 = new Superhero();
superhero2.setHeight(20);
int compareResult = superhero1.compareTo(superhero2);
您已经正确地确定您的问题出在这段代码中:
case 5:
System.out.println(sortMenu());
int val = input.nextInt();
switch (val) {
//HEIGHT
case 6:
System.out.println(Superhero.compareTo());
}
break;
在这条线上:
System.out.println(Superhero.compareTo());
在这个表达式中:
Superhero.compareTo()
Superhero 在这里看起来像一个变量(变量应以小写字母开头,这样会造成混淆),您需要提供另一个 Superhero反对如下:
Superhero anotherSuperhero = new Superhero();
System.out.println(Superhero.compareTo(anotherSuperhero));
我需要在我的代码中实现一个可比较的接口,这样我就可以比较 ArrayList 中的多位信息,例如高度。完成这项工作后,我需要能够在 switch 语句中调用它。我想我已经得到了类似的接口位,但是当我尝试在 switch 语句中调用它时它显示了一条错误消息。有没有人知道为什么我可以修复这个 is/how?我刚刚附上了相关代码,但如果我需要附上更多,请说明。
可比界面
public class Superhero implements Comparable<Superhero> {
public int compareTo(Superhero other) {
return Integer.compare(this.height, other.height);
}
切换语句
case 5:
System.out.println(sortMenu());
int val = input.nextInt();
switch (val) {
//HEIGHT
case 6:
System.out.println(Superhero.compareTo());
}
break;
编辑
当我运行下面添加的代码时出现错误消息:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous tree type: <any>
at heros.java.Heros.main(Heros.java:54)
Java Result: 1
编译器错误信息:
method compareTo in class Superhero cannot be applied to given types;
require: Superhero
found: no arguments
reason: actual and formal argument lists differ in length
您需要再将一个 Superhero 对象作为参数传递给 compareTo 方法。
Superhero h1 = new Superhero();
Superhero h2 = new Superhero();
您需要像下面这样调用 compareTo 方法
h1.compareTo(h2);
actual and formal argument lists differ in length
错误清楚地表明您需要传递必需的参数(Superhero
的对象)以使其在下面的代码中工作。
System.out.println(Superhero.compareTo());
如下所示,不带参数的compareTo() method from the Comparable interface takes a generic as parameter. compareTo()不存在。
public int compareTo(T o)
解决方案
Superhero.compareTo(otherSuperheroObject);
您正在像 Superhero class 的静态方法一样使用 compareTo。您必须在一个 Superhero 实例上调用它才能与另一个实例进行比较。
Superhero superhero1 = new Superhero();
superhero1.setHeight(10);
Superhero superhero2 = new Superhero();
superhero2.setHeight(20);
int compareResult = superhero1.compareTo(superhero2);
您已经正确地确定您的问题出在这段代码中:
case 5:
System.out.println(sortMenu());
int val = input.nextInt();
switch (val) {
//HEIGHT
case 6:
System.out.println(Superhero.compareTo());
}
break;
在这条线上:
System.out.println(Superhero.compareTo());
在这个表达式中:
Superhero.compareTo()
Superhero 在这里看起来像一个变量(变量应以小写字母开头,这样会造成混淆),您需要提供另一个 Superhero反对如下:
Superhero anotherSuperhero = new Superhero();
System.out.println(Superhero.compareTo(anotherSuperhero));