Java Atm机(如何添加备注)

标签 java

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

它必须支持 20 美元和 50 美元的纸币。 它应该能够仅分配合法的纸币组合。例如,100 美元的请求可以通过五张 20 美元纸币或两张 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;
        }

    }
}

最佳答案

既然你在学习,给你写代码对你没有帮助。我将通过提供关键想法来帮助您。假设您想提取X金额,您需要检查以下内容

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

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

  3. X 能被 10 整除吗?如果不是,则无效。

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

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

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

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

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

关于Java Atm机(如何添加备注),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51583811/

相关文章:

Java:当 B 实现 A 时从 List<B> 转换为 List<A>?

java - Spring Boot - 使用 ajax 调用流式传输视频

java - 如何在Java中组合多个.gz文件?

java - 抑制来自另一个包的日志记录

java - Java 中的验证约定

Java 创建并写入 XML 文件

Java - JToggleButton - 虽然无限循环 - 无法单击按钮两次

java - 如何按条件创建 Spring 属性?

java - 如何在不先运行代码的情况下将代码传递给方法?

java - Java 中的子类型还是泛型?