ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 쉽게 배우는 자바 프로그래밍 2판 4장 도전문제
    JAVA/연습문제 2022. 10. 6. 18:23
    반응형

    # 개발 공부하는 초보자가 작성한 답안이니 정답이 아닐 수 있습니다!!!

     

    1. 그림을 참고해 프린터의 상태와 동작을 클래스로 작성하고 테스트 해보자.

     

    📢주어진 값📢
    
    class Printer {
    	int numOfPapers = 0;
    
    	public void print(int amount) {
    		// 코드 추가
    	}
    }
    
    
    public class PrinterTest {
    	public static void main(String[] args) {
    		// Printer 클래스를 테스트 하는 코드
    	}
    }
    
    출력
    30
    🧤정답🧤
    
    class Printer {
    	int numOfPapers = 0;               // numOfPapers이라는 필드(멤버 변수, 인스턴스 변수)
    
    	public void print(int amount) {    // print라는 메서드 (멤버 메서듣)
            System.out.println("출력할 장 수 : " + amount);
    		numOfPapers -= amount;         // numOfPapers 필드에 입력값(매개변수)을 빼주고 대입한다.
    	}
    }
    
    
    public class PrinterTest {
    	public static void main(String[] args) {
    		// Printer 클래스를 테스트 하는 코드
    		Printer demoPrinter = new Printer();   // 객체 생성
    
    		System.out.println("현재 용지 수 : " + demoPrinter.numOfPapers);
    		demoPrinter.numOfPapers = 100;         // 용지 100장 추가
    		System.out.println("용지 추가 수 : " + demoPrinter.numOfPapers);
    		demoPrinter.print(70);                 // 70장 출력
    
    		System.out.println("남아 있는 용지 : " + demoPrinter.numOfPapers);
    	}
    }

     

     

     

    2. 프린터의 용지가 부족할 수도 있다. 따라서 Printer 2클래스를 다음과 같이 수정하되 이번에는 생성자도 추가해보자

    📢주어진 값📢
    public class PrinterTest2 {
    	public static void main(String[] args) {
    		// Printer 클래스를 테스트 하는 코드
    		Printer2 demoPrinter = new Printer2(10); // 객체 생성
    		demoPrinter.print2(2);
    		demoPrinter.print2(20);
    		demoPrinter.print2(10);
    	}
    
    }
    
    
    class Printer2 {
    	private int numOfPapers = 0;
        
        // 초기화하는 생성자 추가
        
        // print()메서드가 다음을 수행하도록 작성
        // 1. 츨력할 때 남아 있는 용지가 없다고 알려준다.
        // 2. 남아있는 용지보다 많은 출력을 요구하면 남아 있는 용지만큼 출력한다.
        // 3. 부족한 용지 매수를 미리 알려 준다.
        }
    }
    🧤정답🧤
    
    class Printer2 {
    	private int numOfPapers = 0;
    
    	public void print2(int amount) {
    		if (numOfPapers > amount) {       // 남아있는 용지의 수가 출력해야할 수 보다 많을 경우
    			numOfPapers -= amount;        // 남아있는 용지의 수 - 출력해야할 수
    			System.out.println(amount + "장 출력했습니다. 현재 " + numOfPapers + "장 남아 있습니다.");
    		} else if (0 < numOfPapers && numOfPapers < amount) {  // 남아있는 용지의 수가 0보다 크고 출력해야할 수 보다 적을 경우
                		numOfPapers -= amount;   // 출력해야할 수가 더크기 때문에 음수값으로 나온다.
                		amount += numOfPapers;   // 출력된 수를 구하기 위해 출력해야할 수 에 남아있는 용지수가 음수값이니 더해준다.
                
                // 음수값으로 나왔기 때문에 부족한 용지수를 구하는 곳에 -1를 곱해줘서 양수값으로 출력이 될 수 있도록 한다.
    			System.out.printf("모두 출력하려면 용지가 %d매 부족합니다. %d장만 출력합니다.\n", (numOfPapers * -1), amount);
    		} else {
    			System.out.println("용지가 없습니다.");
    		}
    	}
    
    	public Printer2(int numOfPapers) {
    		this.numOfPapers += numOfPapers;
    	}
    }
    
    
    public class PrinterTest2 {
    	public static void main(String[] args) {
    		// Printer 클래스를 테스트 하는 코드
    		Printer2 demoPrinter = new Printer2(10); // 객체 생성
    		demoPrinter.print2(2);
    		demoPrinter.print2(20);
    		demoPrinter.print2(10);
    	}
    
    }

     

     

     

     

    3. 양면 출력이 가능한 Printer3 클래스로 수정하되 이번에는 접근자와 설정자도 추가해보자.

    📢주어진 값📢
    
    class Printer3 {
    	private int numOfPapers;
    	private boolean duplex;
    
    	public Printer3(int numOfPapers, boolean duplex) {
    	}
    
    	public void print(int amount) {
    	}
    
    	public boolean getDuplex() {
    	}
    
    	public void setDuplex(boolean duplex) {
    	}
    }
    
    
    public class PrinterTest3 {
    
    	public static void main(String[] args) {
    		Printer3 demoPrinter = new Printer3(20, true);
    		demoPrinter.print(25); 
    		demoPrinter.setDuplex(false); 
    		demoPrinter.print(10);
    	}
    }
    
    
    결과값
    양면으로 13장 출력했습니다. 현재 7장 남아 있습니다.
    단면으로 모두 출력하려면 용지가 3매 부족합니다. 7장만 출력합니다.
    🧤정답🧤
    
    class Printer3 {
    	private int numOfPapers;
    	private boolean duplex;
    
    	public Printer3(int numOfPapers, boolean duplex) {
    		this.numOfPapers = numOfPapers;
    		this.duplex = duplex;
    	}
    
    	public void print(int amount) {
    		if (duplex == true) {
    			if ((amount / 2) == 0) {            // amount값이 짝수일 때
    				numOfPapers -= amount / 2;
    				System.out.printf("양면으로 %d장 출력했습니다. 현재 %d장 남아 있습니다.\n", (amount / 2), numOfPapers);
    			} else {                            // amount값이 홀수일 때 1장에 2면(앞,뒤)이 있으니 다르게 계산해줘야한다.
    				numOfPapers -= (amount / 2) + 1;
    				System.out.printf("양면으로 %d장 출력했습니다. 현재 %d장 남아 있습니다.\n", (amount / 2) + 1, numOfPapers);
    			}
    		} else {
    			if (numOfPapers > amount) {    // 남아있는 용지의 수가 출력해야할 수 보다 많을 경우
    				numOfPapers -= amount;     // 남아있는 용지의 수 - 출력해야할 수
    				System.out.printf("단면으로 모두 출력하여 용지 %d장을 출력하고 남아있는 용지는 %d장 입니다.\n", amount, numOfPapers);
    			} else {                       // 출력해야 할 수가 더 많을 경우
    				numOfPapers -= amount;     // 음수값으로 부족한 용지의 수를 알 수 있다.
    				amount += numOfPapers;     // 출력해야할 수에 음수값인 부족한 용지의 수를 더해서 출력된 용지의 수를 알 수 있다.
    				System.out.printf("단면으로 모두 출력하려면 용지가 %d매 부족합니다. %d장만 출력합니다.\n", (numOfPapers * -1), amount);
    			}
    		}
    	}
    
    	public boolean getDuplex() {           // 접근자 duplex의 값을 가져오기 위해
    		return duplex;
    	}
    
    	public void setDuplex(boolean duplex) { // 설정자 duplex의 값을 변경하기 위해
    		this.duplex = duplex;
    	}
    
    }
    
    
    public class PrinterTest3 {
    
    	public static void main(String[] args) {
    		Printer3 demoPrinter = new Printer3(20, true);   // demoPrinter는 객체 인스턴스다.
    		demoPrinter.print(25); 
    		demoPrinter.setDuplex(false); 
    		demoPrinter.print(10);
    	}
    }
    반응형

    댓글

Designed by Tistory.