Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 设置最大取款限制逻辑_Java - Fatal编程技术网

Java 设置最大取款限制逻辑

Java 设置最大取款限制逻辑,java,Java,我正在开发一个样本银行应用程序,我的银行可以从不同的人的帐户贷款给借款人。 银行有一个最高限额,规定每个人从账户中取多少钱才能达到所需金额 我写了这段代码,在那里我可以得到可以提供贷款的人的名单,而且效果很好。 现在,我需要设定一个上限,即我可以从每个人的储蓄账户中最多提取500美元 public static List<Person> persons(final List<Person> person, final Long amount) { Lis

我正在开发一个样本银行应用程序,我的银行可以从不同的人的帐户贷款给借款人。 银行有一个最高限额,规定每个人从账户中取多少钱才能达到所需金额

我写了这段代码,在那里我可以得到可以提供贷款的人的名单,而且效果很好。 现在,我需要设定一个上限,即我可以从每个人的储蓄账户中最多提取500美元


public static List<Person> persons(final List<Person> person, final Long amount) {
        List<Person> results = new ArrayList<>();
        Long balance = amount;
        for (Person p : person) {
            if (p.getAvailableAmount().compareTo(balance) < 0) {
                results.add(p);
                balance = balance - p.getAvailableAmount();
            }
            else if (p.getAvailableAmount().compareTo(balance) > 0) {
                p.setAvailableAmount(p.getAvailableAmount() - (p.getAvailableAmount() - balance));
                results.add(p);
                break;
            }
            else {
                results.add(p);
                break;
            }
        }
        return results;
    }
    
    
我无法让这段代码正常工作

如果个人账户没有最高提款限额,当前的实施如下


public static List<Person> persons(final List<Person> person, final Long amount) {
        List<Person> results = new ArrayList<>();
        Long balance = amount;
        for (Person p : person) {
            if (p.getAvailableAmount().compareTo(balance) < 0) {
                results.add(p);
                balance = balance - p.getAvailableAmount();
            }
            else if (p.getAvailableAmount().compareTo(balance) > 0) {
                p.setAvailableAmount(p.getAvailableAmount() - (p.getAvailableAmount() - balance));
                results.add(p);
                break;
            }
            else {
                results.add(p);
                break;
            }
        }
        return results;
    }
    
    

公共静态列表人员(最终列表人员、最终长金额){
列表结果=新建ArrayList();
长期余额=金额;
对于(个人p:个人){
如果(p.getAvailableAmount().比较到(余额)<0){
结果:添加(p);
balance=balance-p.getAvailableAmount();
}
如果(p.getAvailableAmount().compareTo(balance)>0),则为else{
p、 setAvailableAmount(p.getAvailableAmount()-(p.getAvailableAmount()-balance));
结果:添加(p);
打破
}
否则{
结果:添加(p);
打破
}
}
返回结果;
}

int MAX\u drawin\u to\u NOW=500在类级别的人员内部,您可以按如下方式调整代码以检查条件:-

public static List<Person> persons(final List<Person> person, final Long amount) {
    List<Person> results = new ArrayList<>();
    Long balance = amount;
    for (Person p : person) {
        if (p.MAX_WITHDRAWL_TILL_NOW > 500) {
            if (p.getAvailableAmount().compareTo(balance) < 0) {
                results.add(p);
                balance = balance - p.getAvailableAmount();
            }
            else if (p.getAvailableAmount().compareTo(balance) > 0) {
                p.setAvailableAmount(p.getAvailableAmount() - (p.getAvailableAmount() - balance));
                results.add(p);
                break;
            }
            else {
                    results.add(p);
                    break;
            }
    }
 }
    return results;
}
公开静态名单人员(最终名单人员、最终多头金额){
列表结果=新建ArrayList();
长期余额=金额;
对于(个人p:个人){
如果(p.MAX\u提取到现在>500){
如果(p.getAvailableAmount().比较到(余额)<0){
结果:添加(p);
balance=balance-p.getAvailableAmount();
}
如果(p.getAvailableAmount().compareTo(balance)>0),则为else{
p、 setAvailableAmount(p.getAvailableAmount()-(p.getAvailableAmount()-balance));
结果:添加(p);
打破
}
否则{
结果:添加(p);
打破
}
}
}
返回结果;
}
请根据您的要求添加自定义代码以更新
MAX\u drawing\u to\u NOW


拥有实例变量可以帮助您为该类的每个实例管理对象级别的变量。

理想的解决方案如下。

步骤1:将
Max_capping
放入
配置文件中。
步骤2:在
Person类中添加一个字段(currentLentAmount类似于此),告诉您该
Max\u capping中银行已经消费了多少。

第3步:你可以在你所共享的逻辑中考虑这个字段。

< P>更好的解决方案应该是下面的一些东西,即在人类中创建一个新的方法来提供有限的数量。 Solution.java

public class Solution {
    public static List<Person> persons(final List<Person> person, Long amount) {
        List<Person> results = new ArrayList<>();
        for(Person p : person){
            Long available = p.getLimitedAvailableAmount();
            if(amount <= available){
                p.setAvailableAmount(p.getAvailableAmount() + (available-amount));
                results.add(p);
                break;
            }
            amount = available;
            results.add(p);
        }
        return results;
    }

}
class Person{
    private static final long LIMIT = 500;

    Long availableAmount;


    public Long getAvailableAmount() {
        return availableAmount;
    }

    public Long getLimitedAvailableAmount() {
        long limited = (availableAmount > LIMIT) ? LIMIT : availableAmount;
        availableAmount -= limited;
        return  limited;
    }

    public void setAvailableAmount(Long availableAmount) {
        this.availableAmount = availableAmount;
    }
}

MAX\u drawr\u TILL\u NOW
定义为一个静态变量,并用它来检查您是否已经超过限制是的,但如何检查,这正是我正在努力解决的问题。条件基本上不是静态的,实例变量请不要进一步破坏这个问题。当你在这里提问时,你把你的问题捐赠给公众,这样它就可以永久用于堆栈溢出问答。许可条款在网站页脚中。