[ JAVA ] 예외와 예외처리 ( 2 )
2022. 1. 15. 18:24ㆍJAVA
예외 발생 처리 |
1. 상세설명(message) 설정강제 2. 미확인 예외들(Exception)과 섞임 방지 |
class MyException extends Exception{
MyException(String message){
// 현재 에러가 발생하지 않는 이유
// 자식클래스의 모든 생성자는
// 부모클래스의 기본생성자를 즉시 호출
super(message);
}
}
Exception excep1=new Exception();
Exception excep2=new Exception("임의의 예외");
// Exception 클래스의 생성자는 오버로딩되어 있음
Scanner sc=new Scanner(System.in);
while(true) {
System.out.println("입력>> "); // 1~3만 허용
try {
int num=sc.nextInt();
if(num<1 || 3<num) {
throw excep2; // 일부러 예외 발생
// 반드시 try-catch 필요
}
}
catch(Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
}
public class Test03 {
public static void main(String[] args) {
// 시외버스예약 프로그램
// 나이: 정수 -> 1~200 유효 / 201,0 -> 유효성 처리
// 유효성 처리를 예외 처리로 변경하자
MyException myExcep=new MyException("1~3 이외의 입력은 불가");
// Exception 클래스의 생성자는 오버로딩되어 있음
Scanner sc=new Scanner(System.in);
while(true) {
System.out.println("입력>> "); // 1~3만 허용
try {
int num=sc.nextInt();
if(num<1 || 3<num) {
throw myExcep; // 일부러 예외 발생
// 반드시 try-catch 필요
}
}
catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
}
import java.util.InputMismatchException;
import java.util.Scanner;
class MyException extends Exception{
// 기존에는 예외가 아니었던 사항
MyException(String message){
super(message);
}
}
public class Test04 {
public static void main(String[] args) {
MyException excep=new MyException("범위 외 입력");
Scanner sc=new Scanner(System.in);
while(true) {
System.out.println("10을 무엇으로 나누겠습니까?(1~100)");
System.out.println("정수 입력: ");
try {
int num=sc.nextInt();
if(num<0 || 100<num) {
throw excep;
}
int res=10/num;
System.out.println(10+"/ "+num+" = "+res);
}
catch(ArithmeticException e) {
System.out.println("계산불가");
}
catch(InputMismatchException e) {
// 버퍼문제 -> console 화면을 UI로 사용하고 있어서 문제됨
sc.nextLine();
System.out.println("정수만 입력");
}
catch(MyException e) {
System.out.println(e.getMessage());
}
catch(Exception e) {
e.printStackTrace();
break;
}
}
}
}
학생부 프로그램 작성하기
1. 학생 클리스를 만들어준다.
class Student{
int pk; // 학번
String name; // 학생이름
int score; // 점수
Student(int pk,String name,int score){
this.pk=pk;
this.name=name;
this.score=score;
}
void update(int pk,String name,int score) {
this.pk=pk;
this.name=name;
this.score=score;
}
@Override
public String toString() {
return "학번:"+pk+", 이름:"+name+", 점수="+score;
}
}
2. 예외처리를 작성해준다.
// 예외처리
class MyException extends Exception{
// 기존에는 예외가 아니었던 사항
MyException(String message){
super(message);
}
}
3. 해당 내용에 로직을 추가해주다.
public class Test01 {
public static void main(String[] args) {
MyException me1=new MyException("범위 외 입력입니다.(1~4)");
MyException me2=new MyException("범위 외 입력입니다.(0~100)");
ArrayList<Student> data=new ArrayList<Student>();
int pk=1001; // 학번 시작은 1001부터
Scanner sc=new Scanner(System.in);
// 제목은 1회만 출력
System.out.println("===학생부 프로그램==========");
while(true) {
System.out.println("1. 학생 추가");
System.out.println("2. 학생 삭제");
System.out.println("3. 출석부 출력");
System.out.println("4. 프로그램 종료");
System.out.print("입력>> ");
try {
int act=sc.nextInt();
if(act<1 || 4<act) {
throw me1;
}
if(act==1) {
// 학생 추가
System.out.println("이름: ");
String name=sc.next();
System.out.println("성적: ");
int score=sc.nextInt();
if(score<0 || 100<score) {
throw me2;
}
data.add(new Student(pk++,name,score));
System.out.println("학생 추가 성공");
}
else if(act==2) {
// 학생 삭제
// pk 존재하는지 확인
// 없으면 없다고 안내
// 있으면 삭제
System.out.println("삭제할 학생번호입력: ");
int sNum=sc.nextInt();
boolean flag=true;
for(int i=0;i<data.size();i++) {
if(data.get(i).pk==sNum) {
flag=false; // F 데이터 존재
data.remove(i);
break;
}
}
if(flag) {
System.out.println("데이터 부재로 삭제 불가");
}
else {
System.out.println("학생 삭제 성공");
}
}
else if(act==3) {
// 학생 리스트 출력
Iterator itr=data.iterator(); // 이터레이터 적용
if(data.size()==0) {
System.out.println("학생이 없습니다.");
continue;
}
while(itr.hasNext()) {
System.out.println(itr.next());
}
}
else if(act==4) {
System.out.println("감사합니다.");
break;
}
else {
throw me1;
}
}
catch(InputMismatchException e) {
sc.nextLine();
System.out.println("정수만 입력하세요.");
}
catch(MyException e) {
System.out.println(e.getMessage());
}
catch(Exception e) {
e.printStackTrace();
}
}
}
}
'JAVA' 카테고리의 다른 글
[ JAVA ] 예외와 예외처리 ( 3 ) (0) | 2022.01.15 |
---|---|
[ JAVA ] 예외와 예외처리 ( 1 ) (0) | 2022.01.13 |
[ JAVA ] 형변환 (0) | 2022.01.12 |
[ JAVA ] 메서드 ( 함수 ) (0) | 2022.01.12 |
[ JAVA ] 배열 활용하여 서점 프로그램 구현하기 (0) | 2022.01.12 |