열심히 끝까지

[코딩 문제] - 6/24 강사님 문제 본문

디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(과제)

[코딩 문제] - 6/24 강사님 문제

노유림 2022. 6. 24. 16:01

문제 요구 조건

1. AL 생성(ArrayList)
2. -1, 0, 1, 2, 3 을 저장!
3. 정수 입력(인덱스 넘버 입력받기)
4. 0을 입력하면 -1이 나옴
   1을 입력하면 0이 나옴
   10/?의 결과값을 출력해주세요!
   double타입으로 출력!
5. 이때 발생 가능한 예외를 처리해주세요!
      (최소 2개)

----문제 해결

package class02;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;
public class Test031 {
	public static void main(String[] args) {
		List<Integer> al = new ArrayList<Integer>(); // ArrayList AL 생성
		Scanner sc = new Scanner(System.in); // Scanner 사용하여 입력값 받기
		// -1, 0, 1, 2, 3 저장
		al.add(-1);
		al.add(0);
		al.add(1);
		al.add(2);
		al.add(3);
		System.out.println("로그 : 배열리스트 확인 : " + al);
		System.out.print("인덱스 넘버를 입력 : ");
		try {
			int num = sc.nextInt(); // 인덱스 숫자 입력받기
			System.out.println("10 / " + al.get(num) + " = " + 10 / al.get(num));
			// 10을 입력받은 인덱스의 값으로 나눈 값 출력
		}
		catch(ArithmeticException e) { // 0 값으로 나누려고 할 때 뜨는 예외 처리
			System.out.println("0 값으로 나누는 것은 불가능 합니다.");
		}
		catch(IndexOutOfBoundsException e) { // 입력받은 숫자의 인덱스 값이 없을 경우
			System.out.println("해당 인덱스에는 숫자가 존재하지 않습니다");
			System.out.println("0부터 "+ al.size() +"미만의 숫자를 입력해주세요!");
		}
		catch(InputMismatchException e) { // 정수가 아닌 다른 형을 넣을 경우
			System.out.println("문자가 아닌 0부터 " +al.size()+ "미만의 숫자를 입력해주세요!");
		}
		catch(Exception e) { // 상위 예외처리 혹시라도 못한 예외처리에 반응
			e.printStackTrace();
			System.out.println("아직 해결하지 못한 예외처리 존재");
		}
	}
}

 

---------강사님 해설

package class02;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;
public class Test04 {
	public static void main(String[] args) {
		List<Integer> al = new ArrayList<Integer>(); // ArrayList AL 생성
		// -1, 0, 1, 2, 3 저장
		al.add(-1);
		al.add(0);
		al.add(1);
		al.add(2);
		al.add(3);
		System.out.println("로그 : 배열리스트 확인 : " + al);
		Scanner sc = new Scanner(System.in); // Scanner 사용하여 입력값 받기
		while(true) {
			try {
				System.out.print("정수입력 ) ");
				int num = sc.nextInt();
				int res = 10/al.get(num);
			}
			catch(InputMismatchException e) {
				System.out.println("로그 : 정수만 입력해주세요!");
				continue;
			}
			catch(IndexOutOfBoundsException e) {
				System.out.println("로그 : 인덱스 범위 예외 발생" + e.getMessage());
				continue;
			}
			catch(ArithmeticException e) {
				System.out.println("로그 : 예외발생 : " + e.getMessage());
				// / by zero 출력 : e.getMessage()
				// e 객체의 getter가 사용!! Exception으로 String message를 가지고 있구나!
				continue;
			}
			catch(Exception e){
				e.printStackTrace();
				System.out.println("로그 : 미확인 예외 발생");
				// continue를 쓰는 것도 좋지만 미확인일 경우 continue를 안 쓰는 것도 방법이다.
			}
			System.out.println("결과 = " + res);
			break;
		}
	}
}

 

----버퍼문제 해결 후 코드

package class02;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;
public class Test04 {
	public static void main(String[] args) {
		List<Integer> al = new ArrayList<Integer>(); // ArrayList AL 생성
		// -1, 0, 1, 2, 3 저장
		al.add(-1);
		al.add(0);
		al.add(1);
		al.add(2);
		al.add(3);
		System.out.println("로그 : 배열리스트 확인 : " + al);
		Scanner sc = new Scanner(System.in); // Scanner 사용하여 입력값 받기
		while(true) {
			int res = 10;
			try {
				System.out.print("정수입력 ) ");
				int num = sc.nextInt();
				res = 10/al.get(num);
			}
			catch(InputMismatchException e) {
				System.out.println("로그 : 정수만 입력해주세요!");
				sc.nextLine(); // 문자열 + 엔터값 먹어주는 아이
				// sc.next()도 가능하다!
				// 이 다음의 스캐너에 입력 후 친 엔터값이 들어가서 계속반복
				// 스캐너의 버퍼를 비워줘야 한다!
				// sc.nextLine()으로 비워주기
				continue;
			}
			catch(IndexOutOfBoundsException e) {
				System.out.println("로그 : 인덱스 범위 예외 발생" + e.getMessage());
				continue;
			}
			catch(ArithmeticException e) {
				System.out.println("로그 : 예외발생 : " + e.getMessage());
				// / by zero 출력 : e.getMessage()
				// e 객체의 getter가 사용!! Exception으로 String message를 가지고 있구나!
				continue;
			}
			catch(Exception e){
				e.printStackTrace();
				System.out.println("로그 : 미확인 예외 발생");
				// continue를 쓰는 것도 좋지만 미확인일 경우 continue를 안 쓰는 것도 방법이다.
			}
			System.out.println("결과 = " + res);
			break;
		}
	}
}