我有一个银行账户程序,实现了一个扩展到支票账户和储蓄账户子类的银行账户超类。
每个账户有四个属性:名字、姓氏、社会保障和余额。
我有一个BankDatabase类,它创建了一个新的ArrayList来存放这些对象。
我想排序这个ArrayList使用比较接口和comareTo()方法。
public interface Comparable<BankAccount>
{
int compareTo(BankAccount other);
}
我实现了与我的超类类似的功能:
public abstract class BankAccount implements Comparable<BankAccount>
我写了下面的comareTo()方法:
@Override
public int compareTo(BankAccount other)
{
if (this.getBalance() < other.getBalance())
{
return -1;
}
if (this.getBalance() > other.getBalance())
{
return 1;
}
return 0;
}
我在BankAccount超类中创建了一个余额获取器。我试着用平衡代替这个。getBalance()。然后在我的BankDatabase类中,我试图创建一个名为print()的void方法,该方法将按余额对BankAccount对象进行排序并打印它们。
这是我没有问题的地方。下面的代码是我现在拥有的:
void print()
{
Collections.sort(database);
for (BankAccount database1 : database)
{
System.out.println(database1);
}
}
对于这段代码,我需要使用Comparable和compareTo(),因为它是赋值的一部分。
我已经导入了java。util。java的ArrayList。util。集合和java。util。列表
下面是我的BankDatabase类和创建新支票或储蓄账户的两种方法:
public class BankDatabase
{
String first;
String last;
List <BankAccount> database;
BankDatabase()
{
database = new ArrayList <BankAccount>();
}
void createCheckingAccount(String customerName, String ssn, float deposit)
{
String[] customerNames = customerName.split(" ");
first = customerNames[0];
last = customerNames[1];
database.add(new CheckingAccount(first, last, ssn, deposit));
}
void createSavingsAccount(String customerName, String ssn, float deposit)
{
String[] customerNames = customerName.split(" ");
first = customerNames[0];
last = customerNames[1];
database.add(new SavingsAccount(first, last, ssn, deposit));
}
任何帮助都将不胜感激。我一直在这里浏览其他线程,使用集合似乎很简单,但它总是失败。
我得到的错误之一是:线程“main”java中出现异常。lang.RuntimeException:不可编译的源代码-错误的符号类型:java。util。收藏。分类
谢谢!
问题在于您的接口声明:
public interface Comparable<BankAccount>
{
int compareTo(BankAccount other);
}
您正在定义一个新的可比较的
接口,即传递给集合的列表元素。sort
方法必须实现java。lang.Comparable
,而不仅仅是任何简单名称为Comparable
的界面。
解决这个问题的简单方法是删除你的类。
或者,您可以声明该接口扩展了内置类:
public interface Comparable<BankAccount> extends java.lang.Comparable<BankAccount> {
@Override int compareTo(BankAccount other);
}
但这并没有什么特别的优势,而且让人困惑的是,你自己的界面与一个知名的界面同名。
另一个不太明显的问题是,您定义中的
Bank帐户
实际上并不引用您定义的Bank帐户
类——它是一个类型变量。它没有特别引用任何类型——您可以用T
(即可比
我得到一个错误-“错误:找不到适合排序(ArrayList)的方法。我如何修复这个问题? 多谢了。
我有一个名为map的HashMap,它将字符存储为键,将整数存储为值,然后使用以下代码将其存储到名为entries的ArrayList中: 现在我正在尝试根据整数值而不是键对这些条目进行排序。我试图使用一个lambda表达式来实现比较器接口,但它不起作用。这是我的代码: 以下是我得到的错误: 这一行有多个标记 > 语法错误,插入“)”以完成表达式 类型集合中的方法sort(列表,比较器)不适用于参
问题内容: 在我正在使用的代码下面,可以正常工作并输出名称,但不能使用sort方法。我期望“ Collections.sort(nameFromText);” 按名字的字母顺序对ArrayList进行排序。 我究竟做错了什么? 问题答案: 方法期望要排序的列表元素具有可比性。元素类型应该实现接口,或者您应该使用带有通用实例的重载方法。 在下面的代码中,您不满足上述两个条件。您的类既没有实现,也没有
我试图实现Comparable和compareTo(),但似乎无法实现。我一直在尝试不同的方法,但我真的不明白。我知道我应该实现可比较的接口,并且我需要在使用它之前创建方法(对我来说很奇怪,从python到面向对象编程)。 我希望它能比较两个人的年龄,所以我试着编写如下所示的代码,但似乎我不能使用compareTo()。我收到错误消息:“此方法必须返回int类型”,但在我看来,我只返回1、-1和0
问题内容: 我有一个类Library,它包含一个Book对象数组,我需要根据Book的Title或PageNumber属性对数组进行排序。我不允许问题与Book一起使用Comparable类。您如何建议我对图书馆中的书籍进行排序?写我自己的排序?还是有更简单的方法?如果您需要代码片段,请问! 问题答案: 您可以提供一个用于比较您希望的任何类型的对象,否则。 对于数组和集合,请使用 甚至像TreeS
问题内容: 有人可以给我看一个简单的示例,如何使用新的lambda语法在Java 8中按字母顺序排序。 问题答案: 对于字符串,这将工作