java提供的降序操作_用Java降序选择对象数组

我目前正在开发一个银行帐户程序,该程序需要用户输入并将其输入到数组中.它执行诸如存款,提款,搜索等操作.我目前无法根据每个帐户中的余额使用选择排序.该程序应基于从最高到最低的余额对帐户进行排序,并将结果打印到屏幕上.

这是我第一次使用选择排序,这是我第一次使用数组.我了解选择排序的概念以及如何使用原始值进行选择,但是将其转换为对象值让我感到很困惑.以下是我用于选择排序的代码.

if (out.equals("Sort")) {

int i, j, maxIndex;

double maxValue;

//getNumberOfAccounts is a static counter incremented each time

//a new bank account is created

for (i = 0; i < BankAccount.getNumberOfAccounts(); i++) {

//Sets first value as largest

maxValue = BankAccounts[i].getBalance();

maxIndex = i; //Index of first value

for (j = i; j == BankAccount.getNumberOfAccounts(); j++) {

//Compares subsequent values to initial max value

if (BankAccounts[j].getBalance() > maxValue) {

maxValue = BankAccounts[j].getBalance();

maxIndex = j;

}

}

//Attempts to swap values

BankAccount temp = BankAccounts[i];

BankAccounts[i] = BankAccounts[maxIndex];

BankAccounts[maxIndex] = temp;

//Outputs Bank Account data in descending order based on balance

BankAccounts[maxIndex].printReport();

}

}

笔记:

-这是整个程序的一部分,因此,如果我缺少括号,那是因为我没有复制整个内容.

-似乎当我运行程序时,它不存储maxValue; maxValue的输出改为输出下一个循环迭代的值.

-当我运行程序时,它只是按照我输入的确切顺序打印银行帐户.

预先感谢您,如果还有更多我可以提供的信息,我会很乐意.

解决方法:

在执行BankAccounts [maxIndex] .printReport();时,您已经交换了值.因此,您要在位置maxIndex上打印值,并且在当前步骤的开始处已经有位置i处的项目.

因此,您需要执行BankAccounts [maxIndex] .printReport();.交换之前,或从正确的位置打印值-BankAccounts [i] .printReport();

关于maxValue-它会更新每个步骤,因此如果您需要在循环结束后执行此操作,则可以在排序例程结束后将其作为BankAccounts [0] .getBalance()获得.

此外,如果您只需要对项目进行排序,但又不限于使用选择排序,那么我想推荐Java内置方法进行排序,因此您的代码应如下所示:

Arrays.sort(BankAccounts, 0, BankAccount.getNumberOfAccounts(), new Comparator() {

@Override

public int compare(BankAccount o1, BankAccount o2) {

if (o1.getBalance() > o2.getBalance()) return -1;

if (o1.getBalance() < o2.getBalance()) return 1;

return 0;

}

}

);

完成此排序操作后,数组BankAccounts会以余额降序排序,您可以在一个简单的循环中打印报告:

for (i = 0; i < BankAccount.getNumberOfAccounts(); i++) {

BankAccounts[i].printReport;

}

标签:selection-sort,arrays,java,sorting

来源: https://codeday.me/bug/20191119/2035650.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值