본문 바로가기
Programming Study/명품자바프로그래밍

[명품자바프로그래밍] 4장 실습문제(2)

by 푸고배 2017. 8. 9.

4. 다음 두 개의 static 가진 ArrayUtility2 클래스를 만들어보자. ArrayUtility2 클래스를 이용하는 테스트용 프로그램도 함께 작성하라.

static int [] concat(int [] s1, int [] s2); // s1과 s2를 연결한 새로운 배열 리턴

static int [] remove(int [] s1, int [] s2); // s1에서 s2 배열의 숫자를 모두 삭제한 새로운 배열 리턴

 

<소스코드> Chapter4_4.java

class ArrayUtility2{
	//s1과 s2를 연결한 새로운 배열 리턴
	static int[] concat(int[] s1, int[] s2){
		
		int arrayTmp[] = new int[s1.length+s2.length];
		for(int i=0;i<arrayTmp.length;i++){
			if(i<s1.length){
				arrayTmp[i] = s1[i];
			} else {
				arrayTmp[i] = s2[i-s1.length];
			}
		}
		return arrayTmp;
	}
	//s1에서 s2배열의 숫자를 모두 삭제한 새로운 배열 리턴
	static int[] remove(int[] s1, int[] s2){
		int a = s1.length;
		for(int i=0;i<s1.length;i++){
			for(int j=0;j<s2.length;j++){
				if(s1[i]==s2[j]){
					for(int k = i;k<s1.length-1;k++){
						s1[k]=s1[k+1];	
					}
					a--;
				}
			}	
		}
		int arrayTemp[] = new int[a];
		for(int i=0;i<a;i++){
			arrayTemp[i]=s1[i];
		}
		return arrayTemp;
	}
}
public class Chapter4_4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int array1[] = {1,2,3,4,5};
		int array2[] = {6,7,8,9,10};
		ArrayUtility2 a1 = new ArrayUtility2();
		int array3[] = a1.concat(array1, array2);
		System.out.print("concat : ");
		for(int num:array3){
			System.out.print(num +" ");
		}

		int array4[] = {2,4,6,8,10};
		System.out.println();
		System.out.print("remove : ");
		int array5[] = a1.remove(array1, array4);
		for(int num:array5){
			System.out.print(num+" ");
		}
	}
}

 

5. 다수의 클래스를 정의하고 활용하는 연습을 해보자. 더하기(+), 빼기(-), 곱하기(*), 나누기(/)를 수행하는 각 클래스 Add, Sub, Mul, Div를 만들어라. 이들은 모두 다음 필드와 메소드를 가진다.

 - int 타입의 a, b 필드 : 연산하고자 하는 피연산자

 - void setValue(int a, int b) : 피연산자를 객체 내에 설정한다.

 - int calculate() : 해당 클래스의 목적에 맞는 연산을 실행하고 그 결과를 리턴한다.

main() 메소드에서는 다음 실행 사례의 그림과 같이 키보드로부터 두 정수와 계산하고자 하는 연산자를 입력받은 후 Add, Sub, Mul, Div 중에서 이 연산을 실행할 수 있는 객체를 생성하고 setValue()와 calculate()를 호출하여 그 결과 값을 화면에 출력한다.


 

<소스코드> Chapter4_5.java

import java.util.Scanner;

class Add{
	int a,b;
	void setValue(int a, int b){
		this.a = a;
		this.b = b;
	}
	int calculate(){
		return a+b;
	}
}
class Sub{
	int a,b;
	void setValue(int a, int b){
		this.a = a;
		this.b = b;
	}
	int calculate(){
		return a-b;
	}
}
class Mul{
	int a,b;
	void setValue(int a, int b){
		this.a = a;
		this.b = b;
	}
	int calculate(){
		return a*b;
	}
}
class Div{
	int a,b;
	void setValue(int a, int b){
		this.a = a;
		this.b = b;
	}
	double calculate(){
		return (double)a/b;
	}
}
public class Chapter4_5 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.print("두 정수와 연산자를 입력하시오>>");
		Scanner sd = new Scanner(System.in);
		int x = sd.nextInt();
		int y =sd.nextInt();
		char ch = sd.next().charAt(0);
		
		switch(ch){
			case '+':
				Add a = new Add();
				a.setValue(x, y);
				System.out.println(a.calculate());
				break;
			case '-':
				Sub s = new Sub();
				s.setValue(x, y);
				System.out.println(s.calculate());
				break;
			case '*':
				Mul m = new Mul();
				m.setValue(x, y);
				System.out.println(m.calculate());
				break;
			case '/':
				Div d = new Div();
				d.setValue(x, y);
				System.out.println(d.calculate());
				break;
		}
		
	}

}

 

 

6. 간단한 공연 예약 시스템을 만들어보자. 다수의 클래스를 다루고 객체의 배열을 다루기에는 아직 자바로 프로그램 개발이 익숙하지 않은 초보자에게 다소 무리가 있을 것이다. 그러나 반드시 넘어야 할 산이다. 이 도전 주제를 통해 산을 넘어갈 수 있는 체력을 키워보자. 공연 예약 시스템의 내용은 다음과 같다.

 - 공연은 하루에 한 번 있다.

 - 좌석은 S석, A석, B석 타입이 있으며 모두 10석의 좌석이 있다.

 - 공연 예약 시스템의 메뉴는 "예약", "조회", "취소", "끝내기"가 있다.

 - 예약은 한 자리만 예약할 수 있고 좌석 타입, 예약자 이름, 좌석 번호를 순서대로 입력받아 예약한다.

 - 조회는 모든 종류의 좌석을 표시한다.

 - 취소는 예약자의 이름을 입력하여 취소한다.

 - 없는 이름, 없는 번호, 없는 메뉴, 잘못된 취소 등에 대해서 오류 메시지를 출력하고 사용자가 다시 시도하도록 한다.


 

<소스코드> Chapter4_6.java

import java.util.Scanner;
import java.util.Scanner;
class Resersystem{
	String[] sname;
	String[] aname;
	String[] bname;
	int seat;
	Resersystem(){
		sname = new String[10];
		aname = new String[10];
		bname = new String[10];
		for(int i=0; i<sname.length;i++){
			sname[i] = "---";
			aname[i] = "---";
			bname[i] = "---";
		}
	}
	void printSname(){
		System.out.print("S>>");
		for(int i=0; i<sname.length;i++){
			System.out.print(" "+sname[i]);
		}
		System.out.println();
	}
	void printAname(){
		System.out.print("A>>");
		for(int i=0; i<aname.length;i++){
			System.out.print(" "+aname[i]);
		}
		System.out.println();
	}
	void printBname(){
		System.out.print("B>>");
		for(int i=0; i<bname.length;i++){
			System.out.print(" "+bname[i]);
		}
		System.out.println();
	}
	void inquiry(){
		printSname();
		printAname();
		printBname();
		System.out.println("<<<조회를 완료하였습니다.>>>");
	}
	void seatchoice(){
		System.out.print("좌석 구분 S(1), A(2), B(3) >> ");
		Scanner s = new Scanner(System.in);
		seat = s.nextInt();
	}
	void setSeat(String name, int num){
		switch(seat){
		case 1:
			if(sname[num-1] == "---") // 중복 검
				sname[num-1] = name;
			else
				System.out.println("이미 예약된 자리");
			break;
		case 2:
			if(aname[num-1] == "---")
				aname[num-1] = name;
			else
				System.out.println("이미 예약된 자리");
			break;
		case 3:
			if(bname[num-1] == "---")
				bname[num-1] = name;
			else
				System.out.println("이미 예약된 자리");
			break;
		default:
			System.out.println("없는 메뉴");
			break;
		}
	}
	void printAllseat(){
		switch(seat){
		case 1:
			printSname();
			break;
		case 2:
			printAname();
			break;
		case 3:
			printBname();
			break;
		default:
			System.out.println("없는 메뉴");
			break;
		}
	}
	void reservation(){
		seatchoice();
		String name;
		int num;
		printAllseat();
		
		System.out.print("이름 : ");
		Scanner s = new Scanner(System.in);
		name = s.next();
		System.out.print("번호 : ");
		num = s.nextInt();
		if(num>0&&num<11)
			setSeat(name, num);
		else
			System.out.println("없는 번호");
	}
	void cancel(){
		seatchoice();
		printAllseat();
		String name;
		int i=0;
		System.out.print("이름 : ");
		Scanner s = new Scanner(System.in);
		name = s.next();
		switch(seat){
		case 1:
			for(;i<sname.length;i++){
				if(sname[i].equals(name)){
					sname[i]="---";
					break;
				}
			}
			break;
		case 2:
			for(;i<aname.length;i++){
				if(aname[i].equals(name)){
					aname[i]="---";
					break;
				}
			}
			break;
		case 3:
			for(;i<bname.length;i++){
				if(bname[i].equals(name)){
					bname[i]="---";
					break;
				}
			}
			break;
		default:
			System.out.println("없는 메뉴");
			break;
		}
		if(i==10){
			System.out.println("없는 이름");
		}
	}
}
public class Chapter4_6 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Resersystem r = new Resersystem();
		while(true){
			System.out.print("예약(1), 조회(2), 취소(3), 끝내기(4) >> ");
			Scanner sd = new Scanner(System.in);
			
			int ch = sd.nextInt();
			switch(ch){
				case 1:
					r.reservation();
					break;
				case 2:
					r.inquiry();
					break;
				case 3:
					r.cancel();
				case 4:
					break;
				default:
					System.out.println("없는 메뉴");
					break;
			}
			if(ch==4) {
				break;
			}
		}
	}

}

 

 

참고자료 : 생능출판 명품 JAVA Programming

github 주소 : https://github.com/ch1517/First_Step/tree/master/Chapter4/Chapter4

 

 

반응형

댓글