웹_프론트_백엔드/단과

[단과_JAVA] 2020.02.24

shine94 2020. 2. 25. 12:39

<아직 완성 코드 아님, 다음 시간에 최종적으로 완성시킬 예정>

** Bus 클래스 **

package transportation;

import java.util.Random;

import javax.swing.JOptionPane;

public class Bus implements TransportationMark{
	// private 필드는 다른 클래스에서 접근할 수 없으므로
	// public getter와 setter를 만들어 주어야 한다.
	// 따라서 외부에서 private필드에 접근하기 위해서는
	// getter, setter를 사용하거나 생성자로 접근한다.
	private String[] stops;
	private String num;

	public final int FEE = 1250;

	public int depart_idx;

	public Bus() {
	}

	public Bus(String[] stops, String num) {
		if (stops.length == 5) {
			this.stops = stops;
		} else {
			JOptionPane.showMessageDialog(null, "정류장은 5개입니다.");
			System.exit(0);
		}
		this.num = num;
	}

	public String[] getStops() {
		return stops;
	}

	public void setStops(String[] stops) {
		if (stops.length == 5) {
			this.stops = stops;
		} else {
			JOptionPane.showMessageDialog(null, "정류장은 5개입니다.");
			System.exit(0);
		}
	}

	public String getNum() {
		return num;
	}

	public void setNum(String num) {
		this.num = num;
	}

	public void start() {
		Random r = new Random();
		depart_idx = r.nextInt(stops.length - 1);
	}

	public int go(int[] money, int dest_idx) {
		int check = -1;

		if (dest_idx - depart_idx <= 0) {
			// 잘못 선택
			check = 0;
		} else {
			if (pay(money)) {
				int i = 0;
				for (i = depart_idx; i < dest_idx; i++) {
					System.out.print(stops[i] + " > ");
					try {Thread.sleep(1000);} catch (InterruptedException e) {;}
				}
				System.out.println(stops[i] + " > 도착");
				check = 1;
			}
		}
		// -1 : 잔액부족, 0 : 잘못선택, 1 : 정상
		return check;
	}

	public boolean pay(int[] money) {
		boolean check = false;
		if (money[0] - FEE >= 0) {
			money[0] -= FEE;
			JOptionPane.showMessageDialog(null, "남은 잔액 : " + money[0] + "원");
			check = true;
		}
		return check;
	}
}


** Subway 클래스 **

package transportation;

import java.util.Random;

import javax.swing.JOptionPane;

public class Subway implements TransportationMark{
	private String[] stops;
	private String num;

	public final int FEE = 1250;

	public int depart_idx;

	public Subway() {
	}

	public Subway(String[] stops, String num) {
		if (stops.length == 7) {
			this.stops = stops;
		} else {
			JOptionPane.showMessageDialog(null, "정류장은 7개입니다.");
			System.exit(0);
		}
		this.num = num;
	}

	public String[] getStops() {
		return stops;
	}

	public void setStops(String[] stops) {
		if (stops.length == 7) {
			this.stops = stops;
		} else {
			JOptionPane.showMessageDialog(null, "정류장은 7개입니다.");
			System.exit(0);
		}
	}

	public String getNum() {
		return num;
	}

	public void setNum(String num) {
		this.num = num;
	}

	public void start() {
		Random r = new Random();
		depart_idx = r.nextInt(stops.length);
	}

	public int go(int[] money, int dest_idx) {
		int check = -1;

		if (dest_idx - depart_idx == 0) {
			// 잘못 선택
			check = 0;
		} else if(dest_idx - depart_idx > 0) {
			if (pay(money)) {
				int i = 0;
				for (i = depart_idx; i < dest_idx; i++) {
					System.out.print(stops[i] + " > ");
					try {Thread.sleep(2000);} catch (InterruptedException e) {;}
				}
				System.out.println(stops[i] + " > 도착");
				check = 1;
			}
		}else {
			if (pay(money)) {
				int i = 0;
				for (i = depart_idx; i > dest_idx; i--) {
					System.out.print(stops[i] + " > ");
					try {Thread.sleep(2000);} catch (InterruptedException e) {;}
				}
				System.out.println(stops[i] + " > 도착");
				check = 1;
			}
		}
		// -1 : 잔액부족, 0 : 잘못선택, 1 : 정상
		return check;
	}

	public boolean pay(int[] money) {
		boolean check = false;
		if (money[0] - FEE >= 0) {
			money[0] -= FEE;
			JOptionPane.showMessageDialog(null, "남은 잔액 : " + money[0] + "원");
			check = true;
		}
		return check;
	}
}


** Taxi 클래스 **

package transportation;

import java.util.Random;

public class Taxi implements TransportationMark{
	final int FEE = 3800;
	final int PER_KM = 1200;

	String name;
	
	public Taxi() {}
	
	public Taxi(String name) {
		super();
		this.name = name;
	}

	public void go(int[] money, String destination) {
		Random r = new Random();
		// 1~10km
		// 0~9 + 1
		int km = r.nextInt(10) + 1;
		int total = FEE + PER_KM;
		System.out.print(destination + "까지의 남은 거리 : ");

		int i;
		for (i = km; i > 1; i--) {
			total += PER_KM;
			System.out.print(i + "km > ");
			try {Thread.sleep(500);} catch (InterruptedException e) {;}
		}
		System.out.println(i + "km > 도착");

		if (!pay(money, total)) {
			money[0] = 0;
			System.out.println("잔액부족 / 경찰 출동중");
		}
		System.out.println("남은 잔고 : " + money[0] + "원");
	}

	public boolean pay(int[] money, int total) {
		boolean check = false;
		if (money[0] - total >= 0) {
			check = true;
			money[0] -= total;
		}
		return check;
	}
}


** Stop 클래스 **

package transportation;

import java.util.Scanner;

public class Stop {
	public static void main(String[] args) {
		String[] stops_41 = {"강남", "역삼", "선릉", "삼성", "종합운동장"};
		String[] stops_141 = {"연신내", "녹번", "대조동", "박달고개", "역촌사거리"};
		String[] stops_1001 = {"일산서부경찰서", "대화역", "주엽고교", "후곡마을", "행정복지센터"};
		
		String[] stops_line2 = {"서초", "방배", "사당", "낙성대", "서울대입구", "봉천", "신림"};
		String[] stops_line3 = {"남부터미널", "교대" , "고속터미널", "잠원", "신사", "압구정", "옥수"};
		
		Bus[] buses = {
				new Bus(stops_41, "41"),
				new Bus(stops_141, "141"),
				new Bus(stops_1001, "1001")
		}; 
		
		Subway[] lines = {
				new Subway(stops_line2, "2"),
				new Subway(stops_line3, "3")
		};
		
		Taxi[] taxies = {
			new Taxi("카카오 택시")
		};
		
		TransportationMark[][] trans = {buses, lines, taxies};
		Scanner sc = new Scanner(System.in);
		int row_choice = 0;
		int column_choice = 0;
		int[] money = {10000};
		
		while(true) {
			System.out.println("[대중교통]\n1.버스\n2.지하철\n3.택시\n4.나가기");
			row_choice = sc.nextInt();
			sc.nextLine();
			
			if(row_choice == 4) {break;}

			row_choice--;
			while(true) {
				int i;
				for (i = 0; i < trans.length; i++) {
					System.out.println(i+1+"."+trans[row_choice][i]);
				}
				System.out.println(i+1+".대중교통 다시 선택");
				column_choice = sc.nextInt();
				sc.nextLine();
				
				if(column_choice == i+1) {break;}
				column_choice--;
				
				int temp = 0;
				
				if(trans[row_choice][column_choice] instanceof Bus) {
					Bus bus = (Bus)trans[row_choice][column_choice];
					bus.start();
					temp = bus.go(money, 2);
					
				}else if(trans[row_choice][column_choice] instanceof Subway) {
					Subway subway = (Subway)trans[row_choice][column_choice];
					subway.start();
					temp = subway.go(money, 2); 
					
				}else {
					Taxi taxi = (Taxi)trans[row_choice][column_choice];
					System.out.print("도착지 : ");
					taxi.go(money, sc.nextLine());
				}
				
			}
			
		}
		
		//1.대중교통을 선택(버스, 지하철, 택시 중 택 1)
		//2.버스와 지하철은 어떤 것인지도 선택(41, 141, .... 중 택 1)
		//1.과 2.에서 입력받은 정수가 각각 행과 열에 들어간다.
		//택시일 경우 Flag를 사용해서 가려내고 go()만 사용해준다.
		
		
////		String[] stops = {"서초", "교대", "강남", "역삼", "선릉"};
////		String[] stops = {"서초", "교대", "강남", "역삼", "선릉", "삼성", "종합운동장"};
//		int[] money = {10000};
//		Taxi kakao = new Taxi("카카오택시");
////		Bus bus_41 = new Bus(stops, "41");
////		Subway line2 = new Subway(stops, "2");
//		Scanner sc = new Scanner(System.in);
//		System.out.print("도착지 : ");
//		
//		kakao.go(money, sc.nextLine());
//		
////		bus_41.start();
//		
////		line2.start();
////		for (int i = 0; i < bus_41.getStops().length; i++) {
////			System.out.print(i+1+bus_41.getStops()[i] + " ");
////		}
////		for (int i = 0; i < line2.getStops().length; i++) {
////			System.out.print(i+1+line2.getStops()[i] + " ");
////		}
////		System.out.println("\n출발지 : " + bus_41.getStops()[bus_41.depart_idx]);
////		System.out.println("\n출발지 : " + line2.getStops()[line2.depart_idx]);
////		System.out.println("도착할 정류소 번호를 입력하세요.");
////		if(bus_41.go(money, sc.nextInt()-1) != 1) {
////		if(line2.go(money, sc.nextInt()-1) != 1) {
////			System.out.println("다음 버스를 이용해주세요.");
////		}
	}
}


** TransportationMark 인터페이스(마커인터페이스를 위해) **

package transportation;

public interface TransportationMark {;}

 

'웹_프론트_백엔드 > 단과' 카테고리의 다른 글

[단과_JAVA] 2020.02.25  (0) 2020.02.26
[단과_C] 2020.02.24  (0) 2020.02.25
[단과_C] 2020.02.21  (0) 2020.02.22
[단과_JAVA] 2020.02.21  (0) 2020.02.22
[단과_C] 2020.02.20  (0) 2020.02.21