При создании симуляции работы банка, хэшмап не сохраняет имена
При создании банка я хотел чтоб каждому пользователю давался случайный ID, который в дальнейшем будет использоваться как ключ для поиска его имени и дальнейших действий, но при удалении пользователя по ключу, он пишет что его имя null, а при создании ему же депозита и вовсе выдаёт ошибку, помогите пожалуйста
import java.io.IOException;
import java.util.*;
public class bank {
public static void main(String[] args){
Simulation start = new Simulation();
start.listStart();
}
}
class Users{
HashMap<Integer, String> idAndClients = new HashMap<>(); // поля данных
private final ArrayList<Integer> listId = new ArrayList<>(); // список имеющихся айди для сравнение
private final HashMap<Integer, depositAction> action = new HashMap<>();
public int randIdAdd(String name){
System.out.println("Операция добавления пользователя:");
Random random = new Random();
int id;
id=random.nextInt(10000);
for (int i = 0; i < listId.size(); i++) {
if(id==listId.get(i)){
id=random.nextInt(10000);
i--;
}
}
listId.add(id);
idAndClients.put(id,name);
action.put(id, new depositAction());
System.out.println("Пользователь: "+idAndClients.get(id)+" ID: "+ id);
System.out.println("....................успешно");
System.out.println();
return id;
}
public void deleteUser(int index){
System.out.println("Операция удаления пользователя:");
System.out.println("Пользователь: "+idAndClients.get(index)+" ID: "+ index);
idAndClients.remove(index);
action.remove(index);
System.out.println("....................успешно");
System.out.println();
}
public void takeOn(int id, int depIndex){ //Создаем массив депозитов для отедьного пользователя для пополнения
depositAction d = action.get(id);
d.takeOnMoney(depIndex);
}
public void takeOff(int id, int depIndex){
depositAction d = action.get(id);
d.takeOffMoney(depIndex);
}
public void createDep(int id, int dep){
System.out.println("Операция по созданию депозитов:");
System.out.println("Пользователь: "+idAndClients.get(id)+" ID: "+ id + "требует создания "+(dep+1)+" депозитов");
depositAction d = action.get(id);
d.addDeposit(dep);
}
public void deleteDep(int id){
depositAction d = action.get(id);
d.deleteDeposit();
}
}
class depositAction extends Currency{
private final ArrayList<Integer> deposits = new ArrayList<>(); //Список депозитов пользователя
Scanner scanner = new Scanner(System.in);
public void addDeposit(int dep) {
if (dep <= 4) {
for (int i = 0; i < dep; i++) {
deposits.add(0);
}
System.out.println("....................успешно");
} else {
System.out.println("Пользователь требует создание более 5 депозитов");
}
}
public void deleteDeposit(){
System.out.println("Какой депозит удалить?");
int quantity = scanner.nextInt();
if (deposits.size() < quantity || deposits.get(quantity)==null) {
System.out.println("Данный депозит отсутствует");
}
else{
deposits.remove(quantity);
System.out.println(quantity + "депозит был удалён");}
}
public void takeOnMoney(int indexDeposit) {
indexDeposit -= 1;
if (deposits.size() > indexDeposit) {
System.out.println("Доступные купюры : 1, 5, 10, 50, 100, 500, 1000");
System.out.print("На сколько пополнить " + indexDeposit + " депозит?:");
int cash = scanner.nextInt();
cash += deposits.get(indexDeposit);
deposits.set(indexDeposit, cash);
System.out.println("На вашем счету:" + deposits.get(indexDeposit));
}
else{
System.out.println("Такого депозита нет");
}
}
public void takeOffMoney(int indexDeposit){
indexDeposit -= 1;
if (deposits.size() > indexDeposit) {
System.out.println("Доступные купюры : 1, 5, 10, 50, 100, 500, 1000");
System.out.print("Сколько денежных средств снять с " +indexDeposit + " депозита?");
int cash = scanner.nextInt();
int timeCash=cash;
while (timeCash!=0){
if((timeCash/1000)>0){
timeCash-=1000;
valuesCurrency[6]-=1;
}
else if((timeCash/500)>0){
timeCash-=500;
valuesCurrency[5]-=1;
}
else if((timeCash/100)>0){
timeCash-=100;
valuesCurrency[4]-=1;
}
else if((timeCash/50)>0){
timeCash-=50;
valuesCurrency[3]-=1;
}
else if((timeCash/10)>0){
timeCash-=10;
valuesCurrency[2]-=1;
}
else if((timeCash/5)>0){
timeCash-=5;
valuesCurrency[1]-=1;
}
else{
timeCash-=1;
valuesCurrency[0]-=1;
}
if(valuesCurrency[0]<0 ||
valuesCurrency[1]<0 ||
valuesCurrency[2]<0 ||
valuesCurrency[3]<0 ||
valuesCurrency[4]<0 ||
valuesCurrency[5]<0 ||
valuesCurrency[6]<0){
addBankMoney();
}
}
cash = deposits.get(indexDeposit)-cash;
deposits.set(indexDeposit, cash);
System.out.println("На вашем счету:" + deposits.get(indexDeposit));
System.out.println("Наличие купюр банка:");
for (int i = 0; i <num.length; i++) {
System.out.println(valuesCurrency[i]);
}
}
else {
System.out.println("Данный депозит отсутствует");
}
}
}
class Currency{
public int[] num = {1, 5, 10, 50, 100, 500, 1000};
public int[] valuesCurrency= {
1000000000,
100000000,
10000000,
1000000,
100000,
10000,
1000
};
public void addBankMoney(){ // Если закончилась какая то валюта пополнить её
for (int i = 0; i <valuesCurrency.length; i++) {
valuesCurrency[i]+=1000;
}
}
}
class Simulation {
public void listStart() {
Users go = new Users();
Random random = new Random();
Users actions = new Users();
ArrayList<Integer> idList = new ArrayList<>();
ArrayList<String> possibleUsers = new ArrayList<>();
idList.add(actions.randIdAdd("Экремика"));
idList.add(actions.randIdAdd("Катя Самбука"));
idList.add(actions.randIdAdd("Сказачное Бали"));
idList.add(actions.randIdAdd("Фифти-Фифти"));
idList.add(actions.randIdAdd("Чебурек"));
idList.add(actions.randIdAdd("Дырчик"));
idList.add(actions.randIdAdd("Сивый"));
possibleUsers.add("Мегатрон");
possibleUsers.add("Набор лего космонавты");
possibleUsers.add("Спинер");
possibleUsers.add("Сок 'Красавчик'");
possibleUsers.add("Телепузик");
possibleUsers.add("Мама");
for (int i = 0; i < 24 * 365; i += random.nextInt(120) + 1) {
int selection = random.nextInt(8);
if(selection==1){
go.randIdAdd(possibleUsers.get(random.nextInt(6)));
}
else if(selection==2){
go.deleteUser(idList.get(random.nextInt(idList.size())));
}
else if(selection==3){
go.createDep(idList.get(random.nextInt(idList.size())),random.nextInt(6));
}
}
}
}
