Java/JAVA8

[자바] 하나의 계좌와 3개의 지점에서 입급과 출금을 하는 프로그램

달의요정루나 2021. 7. 1. 21:48

문제

- 초기계좌에는 10000원이 있다.

- 강남지점에서는 2000원씩 입금한다.

- 인터넷지점에서는 1500원씩 입금한다.

 

package training;

import java.util.Scanner;

class Account1 {
	private int money;
	public Account1(int m) {
		money = m;
	}
	synchronized void input(int amount, String name) {
		money += amount;
		System.out.println(name+": 입금 금액--> "+amount);
	}
	
	synchronized void output(int amount, String name) {
		if ((money-amount)>0) {
			Thread.yield();
			money-=amount;
			System.out.println(name+": 출금금액--> "+amount);
		}
		else {
			System.out.println(name+"잔액부족");
		}
	}
	public void getmoney() {
		System.out.println("잔액: "+money);
	}
		
}

class Using_input extends Thread{ //강남지점에서 2000원씩 입금하는 계좌
	Account1 acc;
	int amount;
	int n;
	public Using_input(Account1 acc, String name, int n) {
		super(name);
		this.acc=acc;
		this.n=n;
	}
	
	public void run() {
		for(int i=0;i<n;i++) {
			try {
				sleep(500);
			} catch (InterruptedException e) {}
			acc.input(2000, getName());
			acc.getmoney();
		}
	}
	
}

class Using_output extends Thread { //인터넷 지점에서 1500원씩 출금하는 계좌
	Account1 acc;
	int amount;
	int n;
	public Using_output(Account1 acc, String name, int n) {
		super(name);
		this.acc=acc;
		this.n=n;
	}
	
	public void run() {
		for(int i=0;i<n;i++) {
			try {
				sleep(500);
			} catch (InterruptedException e) {}
			acc.output(1500, getName());
			acc.getmoney();
		}
	}
}

public class ThreeBanks {
	public static void main(String[] args) {
		Account1 acc = new Account1(10000);
		Scanner input = new Scanner(System.in);
		int g,i;
		System.out.println("강남지점에서 몇 번 입금하고 인터넷지점에서 몇 번 출금할 것인가?");
		g=input.nextInt();
		i=input.nextInt();
		
		Using_input Gangnam = new Using_input(acc, "강남지점",g);
		Using_output Internet = new Using_output(acc, "인터넷지점",i);
		Gangnam.start();
		Internet.start();
	}
	

}

이전에 만든 은행계좌 프로그램을 조금 응용해서 만들었습니다. 원래는 입금과 출금을 하나의 Using메소드를 이용했는데 그렇게 하니깐 강남과 인터넷 지점이 출금과 입금이 동시에 되었습니다.

그래서 Using을 분리 시켜서 메소드를 만들었는 데 더 편한 것 같았습니다.