我必须创建一个项目(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;
}
}
}
答案 0 :(得分:1)
由于您正在学习,因此为您编写代码将无济于事。我会通过提出关键想法来帮助您。假设您想提取X笔金额,则需要检查以下内容
X <20吗?如果是这样,则它无效。
X>是否平衡?如果是这样,则它无效。
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周期中时,一次又一次地递归调用事务不是一个好主意。