Java Atm机器(如何添加注释)

时间:2018-07-29 19:26:33

标签: java

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

它必须支持20美元和50美元的钞票。 它应该只能分配合法的纸币组合。例如,一个100美元的请求可以通过5张20美元的纸币或2张50美元的纸币来满足。不需要提供选项列表。 如果由于找不到合适的注释组合而无法满足请求,则应以某种方式报告错误情况。例如,在只有20美元和50美元钞票的ATM中,无法分配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;
        }

    }
}

1 个答案:

答案 0 :(得分:1)

由于您正在学习,因此为您编写代码将无济于事。我会通过提出关键想法来帮助您。假设您想提取X笔金额,则需要检查以下内容

  1. X <20吗?如果是这样,则它无效。

  2. X>是否平衡?如果是这样,则它无效。

  3. X是否可以被10整除?如果不是,则无效。

这些是最简单的有效性检查。现在,如果验证通过了最简单的检查,那么您将需要检查可能的组合,并检查目标数量附近的所有可能的组合。想一想,您将分发m张50美元的钞票和n张20 $的钞票。 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周期中时,一次又一次地递归调用事务不是一个好主意。