1. 다음 조건을 만족하는 클래스를 구현하여 테스트하는 프로그램을 작성하시오.
- 표준입력으로 두 개의 정수를 입력 받아 곱셈 연산 결과를 출력
- 표준입력에서 정수가 아닌 값이 입력되면 예외가 발새하여 실행이 중단되는데, 이를 예외 처리하여 실행되도록 구현
- 다음 소스를 참고
int x = 0, y = 0, z = 0;
Scanner input = new Scanner(System.in);
System.out.print("정수 두 개 입력 : ");
x = input.nextInt();
y = input.nextInt();
z =x*y;System.out.printf("%d * %d = %d %n", x, y, z);
<소스코드> Chapter8_1.java
package Chapter8_1;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Chapter8_1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int x=0,y=0,z=0;
Scanner input = new Scanner(System.in);
System.out.print("정수 두 개 입력 : ");
try {
x = input.nextInt();
y = input.nextInt();
z =x*y;
System.out.printf("%d * %d = %d %n",x,y,z);
}catch(InputMismatchException e) {
System.out.println(e);
}
}
}
2. 다음 조건을 만족하도록 클래스 BankAccount와 이를 테스트하는 클래스 Ex03 프로그램을 작성하시오.
- 새로운 예외 InvalidWithdraw를 다음과 같이 구현
class InvalidWithdraw extends Exception {
private static final long serialVersionUID = 1L;
public InvalidWithdraw(String msg) {
super(msg);
}
}
- 클래스 BankAccount는 최저 잔금을 저장할 수 있는 필드를 지정하는 생성자를 제공하며, 메소드 deposit(money)은 입금 메소드이며, 메소드 withdraw(money)는 출금 메소드로 인출 요청 금액이 음수이거나 최저 잔금 이하로 인출을 요청하면 적당한 메시지의 예외 InvalidWithdraw를 발생시킨다.
- 즉 다음은 최저 잔고가 -100,000원인 은행계좌를 만들어 500,000원을 인출하려는 소스로서, 클래스 Ex03의 main()에서 다음 소스의 예외처리를 작성하시오.
BankAccount ba = new BankAccount(-100000);
ba.withdraw(500000);
<소스코드>
BankAccount.java
package Chapter8_2;
import javax.activity.InvalidActivityException;
class InvalidWithdraw extends Exception {
private static final long serialVersionUID = 1L;
public InvalidWithdraw(String msg) {
super(msg);
}
}
public class BankAccount {
int minmoney;
int money;
public BankAccount(int minmoney) {
this.minmoney = minmoney;
money=0;
}
void deposit(int money) throws InvalidActivityException {
if(money<0)
throw new InvalidActivityException("양수를 입력하세요");
else {
this.money += money;
}
}
void withdraw(int money) throws InvalidActivityException {
this.money -= money;
if(money<0)
throw new InvalidActivityException("양수를 입력하세요");
else {
if(this.money<this.minmoney)
throw new InvalidActivityException("최대 인출 금액을 초과했습니다.");
}
}
}
Ex03.java
package Chapter8_2;
import javax.activity.InvalidActivityException;
public class Ex03 {
public static void main(String[] args) throws InvalidActivityException {
// TODO Auto-generated method stub
BankAccount ba = new BankAccount(-100000);
ba.withdraw(500000);
}
}
3. 위에서 구현한 클래스 InvalidWithdraw와 BankAccount를 다음 조건을 만족하도록 다시 구현하여 클래스 ex03에서 테스트하시오.
- 클래스 Ex03에서 다음 소스에 문법오류가 없도록 예외 InvalidWithdraw를 비체크 예외로 작성하시오.
BankAccount ba = new BankAccount(-100000);
ba.deposit(100000);ba.withdraw(100000);
ba.withdraw(200000);
- 위 클래스 Ex03을 실행하면 다음과 같이 마지막 문장에서 예외가 발생하도록 BankAccount를 적절히 구현시오(단 패키지와 예외 발생 줄 번호는 달라도 상관없음).
정상 입금처리 : 입금금액=100000, 잔금 =100000
정상 출금처리 : 출금금액=100000, 잔금 = 0
javax.activity.InvalidActivityException: 초과출금 요구 예외
at Chapter8_3.BankAccount.withdraw(BankAccount.java:43)
at Chapter8_3.Ex03.main(Ex03.java:12)
- 위 클래스 Ex03에서 다시 예외처리를 구현하시오.
<소스코드>
BankAccount.java
package Chapter8_3;
import javax.activity.InvalidActivityException;
class InvalidWithdraw extends RuntimeException {
private static final long serialVersionUID = 1L;
public InvalidWithdraw(String msg) {
super(msg);
}
}
public class BankAccount {
int minmoney;
int money;
public BankAccount(int minmoney) {
this.minmoney = minmoney;
money=0;
}
void deposit(int money) {
if(money<0)
try {
throw new InvalidActivityException("양수를 입력하세요");
} catch (InvalidActivityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
else {
this.money += money;
System.out.printf("정상 입금처리 : 입금금액=%6d, 잔금 =%6d\n",money,this.money);
}
}
void withdraw(int money) {
this.money -= money;
if(money<0)
try {
throw new InvalidActivityException("양수를 입력하세요");
} catch (InvalidActivityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
else {
if(this.money<this.minmoney)
try {
throw new InvalidActivityException("초과출금 요구 예외");
} catch (InvalidActivityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
else
System.out.printf("정상 출금처리 : 출금금액=%6d, 잔금 =%6d\n",money,this.money);
}
}
}
Ex03.java
package Chapter8_3;
import javax.activity.InvalidActivityException;
public class Ex03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
BankAccount ba = new BankAccount(-100000);
ba.deposit(100000);
ba.withdraw(100000);
ba.withdraw(200000);
}
}
4. 다음 조건을 만족하도록 스레드 PrimeNumber01 프로그램을 작성하여 클래스 Ex04의 main() 메소드에서 테스트하시오.- 클래스 PrimeNumber01은 1에서 지정된 생성자의 인자까지 소수를 구하여 출력하는 프로그램- 클래스 Ex04의 main() 메소드에서 다음을 실행하면 1에서 20사이의 소수인 다음이 출력
primeNumber01 pn = new PrimeNumber01(20);
pn.start();
2 3 5 7 11 13 17 19 |
<소스코드>
Ex04.java
package Chapter8_4;
public class Ex04 {
public static void main(String[] args) {
// TODO Auto-generated method stub
PrimeNumber01 pn = new PrimeNumber01(20);
pn.start();
}
}
PrimeNumber.java
package Chapter8_4;
public class PrimeNumber01 extends Thread {
int num; // 인자를 저장할 변수
PrimeNumber01(int num){
this.num=num;
}
public void run() {
boolean s = true;
for(int i=2;i<=num;i++) { // 2부터 num까지
for(int j=2;j<i;j++) { // 2부터 i까지의 숫자로
if(i%j==0) { // 나누었을때 나누어 떨어지면
s = false; // 소수가 아니다.
break; // 다음 숫자로 넘어가기 위해 바로 정지
}
}
if(s) { // true이면 (=소수이면)
System.out.print(i+"\t");
}
s = true;
}
}
}
참고자료 : 인피니티북스 절대 JAVA
github 주소 :
https://github.com/ch1517/Network-programming/tree/master/Chapter8
'Programming Study > 절대JAVA' 카테고리의 다른 글
[절대JAVA]9장 프로그래밍 연습문제(1) (0) | 2018.09.28 |
---|---|
[절대JAVA]8장 프로그래밍 연습문제(2) (0) | 2018.09.27 |
[절대JAVA]7장 프로그래밍 연습문제(2) (0) | 2018.09.25 |
[절대JAVA]7장 프로그래밍 연습문제(1) (0) | 2018.09.24 |
[절대JAVA]6장 프로그래밍 연습문제(2) (0) | 2018.09.23 |
댓글