Java Atm机(如何添加注释)

Java Atm机(如何添加注释),java,Java,我必须做一个项目(java的atm机),其中atm机必须支持20美元和50美元的钞票。要求: 它必须支持20美元和50美元的纸币。 它应该只能分发合法的纸币组合。例如,一张100美元的申请可以通过五张20美元的钞票或两张50美元的钞票来满足。无需提供选项列表。 如果由于找不到合适的注释组合而无法满足请求,则应以某种方式报告错误情况。例如,在只有20美元和50美元纸币的自动取款机中,不可能分发30美元 我找不到添加注释的解决方案,我已经完成了以下程序 import java.util.Scanne

我必须做一个项目(java的atm机),其中atm机必须支持20美元和50美元的钞票。要求:

它必须支持20美元和50美元的纸币。 它应该只能分发合法的纸币组合。例如,一张100美元的申请可以通过五张20美元的钞票或两张50美元的钞票来满足。无需提供选项列表。 如果由于找不到合适的注释组合而无法满足请求,则应以某种方式报告错误情况。例如,在只有20美元和50美元纸币的自动取款机中,不可能分发30美元

我找不到添加注释的解决方案,我已经完成了以下程序

import java.util.Scanner;

public class AtmMachine{

    private static Scanner in; 
    private static float balance = 200; 
    public static void main(String args[]){
        in = new Scanner(System.in);


        transaction();
    }

    private static void transaction(){


        int choice; 

        System.out.println("Please select an option"); 
        System.out.println("1. Withdraw");
        System.out.println("2. Balance");

        choice = in.nextInt();

        switch(choice){
            case 1:
                float amount; 
                System.out.println("Please enter amount to withdraw: "); 
                amount = in.nextFloat();
                if(amount > balance || amount == 0){
                    System.out.println("You have insufficient funds\n\n"); 
                    transaction(); 
                } else {

                    balance = balance - amount; 
                    System.out.println("You have withdrawn "+amount+" and your new balance is "+balance+"\n");
                    transaction(); 
                }
            break; 


           case 2:

                System.out.println("Your balance is "+balance+"\n");
                transaction(); 
            break;

            default:
                System.out.println("Invalid option:\n\n"); 
                transaction();
            break;
        }

    }
}

因为您正在学习,所以为您编写代码对您没有帮助。我将通过给出关键的想法来帮助您。假设您想提取X笔钱,您需要检查以下内容

  • X<20吗?如果是,那么它是无效的

  • X>平衡吗?如果是,那么它是无效的

  • X可以被10整除吗?如果没有,那么它是无效的

  • 这些是最简单的有效性检查。现在,如果验证通过了最简单的检查,那么您需要检查可能的组合,检查目标金额周围所有可能的组合。想象一下,你将分发50美元的m张钞票和20美元的n张钞票。m和n的可能组合是什么?将这些用作变量并增加/减少它们。首先增加m直到你达到X。你达到了吗?然后将其放入一组结果中。当然,使用具有适当数据结构的变量。然后重复以下步骤,直到m达到-1:

    减少m 增加n直到达到或超过X 如果是解决方案,则将其存储在可能的解决方案中 将n设置为0

    现在,您可以选择一组解决方案。当然,您的程序中的余额是不正确的。你需要知道你有多少张20美元和50美元的钞票。好的,您总共有200美元,但它是由5*20美元和2*50美元组成的吗?还是由4*50美元组成?如您所见,您将需要修改您的成员,您的余额变量对于这个问题来说过于简单

    现在,由于您有一组解决方案,因此需要选择最佳解决方案。最佳解决方案是导致新m和n彼此最接近的状态的解决方案。选择溶液,相应减少m和/或n,并等待下一次提取


    当您可以将事务简单地放入一个while循环中时,反复调用事务不是一个好主意。

    您的问题是什么?你能用散文描述一下如何将一笔钱分成20和50的组合吗?你能,假设这是可能的吗?你能检测出什么时候不是吗?你的问题是什么?为了找到一个算法,试着装傻。如果我要110美元,你会如何在50岁和20岁时给我?50,50,失败。20,20,20,20,20,失败。50,20,20,20,成功。最盲目、最愚蠢、最顽固、最狭隘的做法是什么?如果你能回答这个问题,那么你已经完成了90%的算法定义。你还需要一个退出点。我明白你的意思,但我是java初学者,我无法编写支持50美元和20美元notes的代码。如果有人能帮我按照我说的要求写这段代码,那将非常有帮助提示:每一个大于40且可被10整除的数字在你的作业中都是有效的。