JAVA를 잡아라!...

JAVA_예외처리(Exception)_#2 본문

JAVA/JAVA_복습문제

JAVA_예외처리(Exception)_#2

onivv 2023. 12. 8. 15:25

문제

[10 8 5 0 -3] 배열리스트가 있습니다.
	사용자에게 나눌 정수를 입력받습니다. ex) 1
	100/배열리스트 1번째 정수의 결과를 출력해주세요!
	100/10 = 10
	사용자에게 정수를 입력받습니다. ex) 3
	100/배열리스트 3번째 정수의 결과를 출력해주세요!
	100/2 = 50
		
단, 100/0의 경우 "0으로는 나눌 수 없습니다." 출력

 

Code (예외처리 전)

package freefree;

import java.util.ArrayList;
import java.util.Scanner;

public class Freefree {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		ArrayList<Integer> datas = new ArrayList<Integer>();
		datas.add(10);
		datas.add(8);
		datas.add(5);
		datas.add(0);
		datas.add(-3);
		System.out.println(datas);
		
		int num1 = 0;
		int result = 0;
		
		System.out.print("나눌 정수 입력 >> ");
		
		num1 = sc.nextInt();
		result = 100 / datas.get(num1 - 1);
		
		System.out.println(100 + "/" + datas.get(num1 - 1) + "=" + result);
	}

}

 

Console

▶ 1

길이가 5인 배열에서 인덱스 5에 접근하려고 했으나 해당 인덱스는 존재하지 않음

 

▶ 2

산술 관련 연산 예외. 수를 0으로 나누려고 함

 

▶ 3

입력 형식이 예상과 다를 때 발생. 한글이 있음

 

try-catch_ver1

올바른 값 입력할때까지 프로그램 종료 안됨

package practice01;

import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;

public class Exception02 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		ArrayList<Integer> datas = new ArrayList<Integer>();
		datas.add(10);
		datas.add(8);
		datas.add(5);
		datas.add(0);
		datas.add(-3);
		System.out.println(datas);
		
		System.out.print("나눌 정수 배열index위치 입력 >> ");
		int num1 = 0;
		int result = 0;
		while(true) {
			try {
				num1 = sc.nextInt();
				result = 100 / datas.get(num1 - 1);
				break;
			}
			catch(IndexOutOfBoundsException e) {
				System.out.println("해당 인덱스 요소는 없습니다.");
				continue;
			}
			catch(ArithmeticException e) {
				System.out.println("0으로 나눌 수 없습니다.");
				continue;
			}
			catch(InputMismatchException e) {
				sc.nextLine();
				System.out.println("정수만 입력바랍니다.");
				continue;
			}
		}
		System.out.println(100 + "/" + datas.get(num1 - 1) + "=" + result);

	}

}

 

try-catch_ver2

예외 발생하면 안내문 출력 후 프로그램 종료

package class02;

import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;

public class Test03 {

	public static void main(String[] args) {
			
		Scanner sc = new Scanner(System.in);
		ArrayList<Integer> datas = new ArrayList<Integer>();
		datas.add(10);
		datas.add(8);
		datas.add(5);
		datas.add(0);
		datas.add(-3);
		System.out.println(datas);
		
		System.out.print("나눌 정수 배열index위치 입력 >> ");
		int num1 = 0;
		int result = 0;
			try {
				num1 = sc.nextInt();
				result = 100 / datas.get(num1 - 1);
			}
			catch(IndexOutOfBoundsException e) {
				System.out.println("해당 인덱스 요소는 없습니다.");
				return;
			}
			catch(ArithmeticException e) {
				System.out.println("0으로 나눌 수 없습니다.");
				return;
			}
			catch(InputMismatchException e) {
				sc.nextLine();
				System.out.println("정수만 입력바랍니다.");
				return;
			}
		System.out.println(100 + "/" + datas.get(num1 - 1) + "=" + result);
		
	}
	
}

 

'JAVA > JAVA_복습문제' 카테고리의 다른 글

JAVA_MVC_#2_학생부.ver1  (1) 2023.12.11
JAVA_MVC_#1_계산기  (0) 2023.12.11
JAVA_예외처리(Exception)_#1  (0) 2023.12.08
JAVA_배열리스트_#1_Student  (0) 2023.12.07
JAVA_인터페이스_#1_TV (+ 싱글톤 패턴)  (2) 2023.12.07