<아직 완성 코드 아님, 다음 시간에 최종적으로 완성시킬 예정>
** 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 |