열심히 끝까지
[코딩 문제] - 6/24 강사님 문제 본문
문제 요구 조건
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;
}
}
}
'디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(과제)' 카테고리의 다른 글
[코딩 문제] - 6/27 강사님 문제 (0) | 2022.06.27 |
---|---|
[능력단위평가] - 6/27 문제 답안 (0) | 2022.06.27 |
[코딩 문제] - 6/23 강사님 문제 (0) | 2022.06.23 |
[설계 문제] - 6/22 치킨집 프렌차이즈 (0) | 2022.06.22 |
[코딩 문제] - 6/21 포켓몬과제 (0) | 2022.06.22 |