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

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

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<BankAccount>() {
        @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;
}

09-25 22:14
查看更多