JAVA/연습문제
쉽게 배우는 자바 프로그래밍 2판 4장 도전문제
세언이
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);
}
}
반응형