[英]Conversion money
public class Terminal {
private Map<Integer, Integer> money= new HashMap<>();
private int balance;
private Scanner in;
private int AMOUNT_OF_5 = 500;
private int AMOUNT_OF_10 = 100;
private int AMOUNT_OF_15 = 60;
private int AMOUNT_OF_20 = 20;
private int AMOUNT_OF_50 = 4;
private int AMOUNT_OF_100 = 2;
public Terminal() {
money.put(5, AMOUNT_OF_5 * 5);
money.put(10, AMOUNT_OF_10 * 10);
money.put(15, AMOUNT_OF_15 * 15);
money.put(20, AMOUNT_OF_20 * 20);
money.put(50, AMOUNT_OF_50 * 50);
money.put(100, AMOUNT_OF_100 * 100);
balance = 5000;
in = new Scanner(System.in);
while (true) {
System.out.println("Банкомат");
System.out.println("1.Пополнить счёт");
System.out.println("2.Выдача наличных");
System.out.println("3.Остаток на счёте");
System.out.println("4.Выход");
System.out.print("Выберите нужную Вам операцию:");
int n = in.nextInt();
switch (n) {
case 1:
System.out.print("Внесите сумму для пополнения:");
int deposit = in.nextInt();
while ((deposit % 10) != 0){
System.out.println("Неверная сумма");
deposit = in.nextInt();
} if (balance >= deposit) {
balance = balance + deposit;
System.out.println("Ваш баланс был успешно пополнен");
}else {
System.out.println("Ваш депозит превышает лимит");
}
System.out.println("");
break;
case 2:
System.out.print("Введите сумму для снятия:");
int withdraw = in.nextInt();
while ((withdraw % 10) != 0){
System.out.println("Неверная сумма");
withdraw = in.nextInt();
}
if (balance >= withdraw) {
balance = balance - withdraw;
System.out.println("Введите сумму для снятия");
} else {
System.out.println("Недостаточный баланс");
}
System.out.println("");
break;
case 3:
checkAndGiveMoney();
System.out.println("Balance : " + balance);
System.out.println("");
break;
case 4:
System.exit(0);
}
}
}
public static void main (String[] args) throws java.lang.Exception
{
Terminal terminal = new Terminal();
terminal.checkAndGiveMoney();
}
public void checkAndGiveMoney(){
int requiredMoney = in.nextInt();
for (final Map.Entry<Integer, Integer> entry : money.entrySet()) {
int value = entry.getValue();
int key = entry.getKey();
if (value >= requiredMoney && ((value - requiredMoney) % key == 0)){
entry.setValue(value - requiredMoney);
balance = balance - requiredMoney;
System.out.println(entry.getKey() + ":" + requiredMoney / key);
break;
}
}
}
}
不可能調用右下角的 checkAndGiveMoney 實現的方法,該方法應該顯示必要的賬單數量,例如 300 = 100: 3 告訴我我如何適應案例 3? 余額以鈔票數量及其面值的形式顯示
您無法獲得案例 3 的輸出100:3
的直接問題是因為您沒有分配足夠的100
來提取300
,您只存入了200
line 10: (private int AMOUNT_OF_100 = 2;)
當然把它private int AMOUNT_OF_100 = 3;
程序在20
s 之前選擇100
s 鈔票是不夠的,因為Map.Entry<Integer, Integer> entry
的數據結構是無序的,因為HashMap是無序/無序的。 因此,為了顯示100:3
,訂單需要將100
貨幣排序高於20
,因此使用LinkedList可以在選擇要在輸出中使用的鈔票值之前對貨幣進行排序。
import java.util.Scanner;
import java.util.HashMap;
import java.util.Map;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.LinkedList;
import java.util.Iterator;
import java.util.Comparator;
public class Terminal {
private Map<Integer, Integer> money= new HashMap<Integer, Integer>();
private int balance;
private Scanner in;
private int AMOUNT_OF_5 = 500;
private int AMOUNT_OF_10 = 100;
private int AMOUNT_OF_15 = 60;
private int AMOUNT_OF_20 = 20;
private int AMOUNT_OF_50 = 4;
private int AMOUNT_OF_100 = 3;
public Terminal() {
money.put(5, AMOUNT_OF_5 * 5);
money.put(10, AMOUNT_OF_10 * 10);
money.put(15, AMOUNT_OF_15 * 15);
money.put(20, AMOUNT_OF_20 * 20);
money.put(50, AMOUNT_OF_50 * 50);
money.put(100, AMOUNT_OF_100 * 100);
balance = 5000;
in = new Scanner(System.in);
while (true) {
System.out.println("Банкомат");
System.out.println("1.Пополнить счёт");
System.out.println("2.Выдача наличных");
System.out.println("3.Остаток на счёте");
System.out.println("4.Выход");
System.out.print("Выберите нужную Вам операцию:");
int n = in.nextInt();
switch (n) {
case 1:
System.out.print("Внесите сумму для пополнения:");
int deposit = in.nextInt();
while ((deposit % 10) != 0){
System.out.println("Неверная сумма");
deposit = in.nextInt();
} if (balance >= deposit) {
balance = balance + deposit;
System.out.println("Ваш баланс был успешно пополнен");
}else {
System.out.println("Ваш депозит превышает лимит");
}
System.out.println("");
break;
case 2:
System.out.print("Введите сумму для снятия:");
int withdraw = in.nextInt();
while ((withdraw % 10) != 0){
System.out.println("Неверная сумма");
withdraw = in.nextInt();
}
if (balance >= withdraw) {
balance = balance - withdraw;
System.out.println("Введите сумму для снятия");
} else {
System.out.println("Недостаточный баланс");
}
System.out.println("");
break;
case 3:
checkAndGiveMoney();
System.out.println("Balance : " + balance);
System.out.println("");
break;
case 4:
System.exit(0);
}
}
}
public static void main (String[] args) throws java.lang.Exception
{
Terminal terminal = new Terminal();
terminal.checkAndGiveMoney();
}
public void checkAndGiveMoney(){
int requiredMoney = in.nextInt();
//System.out.println(money.entrySet());
Map sortedMoney = sortByValue(money);
//System.out.println(sortedMoney);
for (final Map.Entry<Integer, Integer> entry : money.entrySet()) {
int value = entry.getValue();
int key = entry.getKey();
//System.out.println(key +","+ value);
if (value >= requiredMoney && ((value - requiredMoney) % key == 0)){
entry.setValue(value - requiredMoney);
balance = balance - requiredMoney;
System.out.println(entry.getKey() + ":" + requiredMoney / key);
break;
}
}
}
static Map sortByValue(Map map) {
List list = new LinkedList(map.entrySet());
Collections.sort(list, new Comparator() {
public int compare(Object o1, Object o2) {
return ((Comparable) ((Map.Entry) (o2)).getValue())
.compareTo(((Map.Entry) (o1)).getValue());
}
});
Map result = new LinkedHashMap();
for (Iterator it = list.iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry)it.next();
result.put(entry.getKey(), entry.getValue());
}
return result;
}
}
希望這可以幫助! Наилучшие пожелания
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.