我必须做一个项目(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金额,您需要检查以下内容
X < 20 吗?如果是这样,则无效。
X > 平衡吗?如果是这样,则无效。
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/