Math 클래스 예제: 소수 구하기
11~14라인 Math 클래스의 sqrt()메소드로 제곱근을 구할 수 있다.
17라인 boolean형 변수 isPrime를 선언하고, 초기값을 true로 한다.
19~23라인 2부터 num의 제곱근 까지 나누었을 때 나누어 떨어지는 수가 있으면 isPrime false로 한다.
26~29라인 isPrime이 true이면 소수이고, false이면 소수가 아니다.
Math 클래스 예제2: 소수 구하기2
먼저 소수인지 판별하는 메소드 isPrime()을 선언한다.
8라인 배열의 길이인 NUM을 static final로 선언한다.
15라인 int형 배열 primes의 길이를 NUM으로 선언한다.
18라인 난수의 최대값과 최소값을 설정한다.
21~22라인 뽑힌 난수가 소수이면 primes에 값을 저장하고 primes에 NUM 개가 찰 때까지 반복한다.
26라인 primes를 오름차순 정렬한다.
27라인 primes를 문자열 형식으로 바꾼 뒤 출력한다.
예외(Exception)
문법 오류가 아니고, 실행하면서 발생하는 오류이다.(발생 가능성을 고려해서 프로그래밍해야 한다.)
원인에 따라 다른 이름xxxException이 발생하고 이들은 Exception 클래스의 자식 클래스이다.
Exception이 실행 중에 발생하면 프로그램이 그 시점부터 중단된다.
Exception을 예상하고 프로그램이 중단되지 않도록 프로그램을 구현해야 한다.
NullPointerException
객체가 없는 상태인 null 값을 갖는 참조 변수로 객체 접근 연산자 .(도트)를 사용했을 때 발생한다.
message는 null 값을 갖는데 .charAt(0) 메소드로 0번 자리 값을 반환하려 해서 NullPointerException이 발생한다.
ArrayIndexOutOfBoundsException
배열의 인덱스 범위(길이)를 벗어날 경우 발생한다.
num의 인덱스 범위는 0~4인데 5번 인덱스에 값을 저장하려 해서 ArrayIndexOutOfBoundsException이 발생한다.
InputMismatchException
입력을 할 때 지정한 형식 외에 다른 형식의 값을 입력할 경우 발생한다.
nextInt()로 입력 값을 설정했는데 abc 등의 문자열을 입력하면 InputMismatchException이 발생한다.
NumberFormatException
정수,실수형 래퍼 클래스의 XX.parseXX() 메소드로 문자열을 숫자로 변환할 수 있다.
parse.XX() 메소드의 인자에 숫자로 변환될 수 없는 문자가 포함되어 있을 경우 발생한다.
abc나 , 등을 인자로 입력하면 NumberFormatException이 발생한다.
예외 처리 : try catch
형식: try {..원래 해야할 명령들..} catch() {..Exception 발생 시 실행할 명령들..}
실행 중에 잘못된 값으로 발생하는 오류(exception)를 처리한다.
try catch 예제1
catch 블록은 여러 개 작성할 수 있다.
7라인 try { } 블록 안에서 오류가 발생하면 15라인 또는 18라인의 해당 오류에 대한 catch 블록이 실행된다.
9,10라인 NullPointerException이 발생하므로 15라인의 catch 블록이 실행된다.
12,13라인 입력 값에 숫자가 아닌 문자를 입력할 경우 InputMismatchException가 발생할 수 있다.
그렇다면 18라인의 catch 블록이 실행된다.
15라인의 catch문은 NullPointerException 발생 시에만 처리된다.
18라인의 catch문은 NullPointerException을 제외한 오류가 발생 시에 처리된다.
18라인 Exception이 NullPointerException보다 상위 예외 클래스이기 때문에 NullPointerException catch문보다
아래 쪽에 위치해야 한다. Exception catch문이 위쪽에 있을 경우 NullPointerException catch문은 실행되지 않는다.
→ 상위 예외 클래스의 catch 블록이 하위 예외 클래스의 catch 블록보다 아래 쪽에 위치해야 한다
try catch 예제2
13라인 while문으로 오류가 발생했을 경우를 대비하여 다시 선택할 수 있도록 한다.
15,16라인 for문으로 메뉴 번호와 항목들을 출력한다.
17~19라인 사용자의 숫자 입력(1~5)을 받아 주문할 음식을 선택하고 어떤 음식을 주문했는지 출력한다.
20라인 break문으로 주문이 완료되었을 경우 while문을 종료한다.
21,22라인 숫자가 아닌 다른 문자를 입력 받아 NumberFormatException이 발생할 경우 catch 블록을 실행한다.
참조변수.getMessage로 오류의 원인을 반환할 수 있다.
23,24라인 1~5가 아닌 다른 숫자를 입력 받아 ArrayIndexOutOfBoundsException이 발생할 경우 catch 블록을 실행한다.
결과
파일 출력
File 클래스로 경로와 파일명을 설정하고, PrintWriter 클래스로 출력문을 파일로 전송한다.
파일 입/출력에서는 예외 처리(try~catch)를 꼭 해야 한다.
11라인 변수 filename에 파일 경로와 이름을 입력한 문자열을 참조한다. 이스케이프 문자로 입력한다.(\\)
14라인 File 객체를 생성하고 변수 file에 참조시킨다. File file = new File("파일경로\이름");
17라인 파일 출력할 때 예외 처리(try~catch)는 필수이다.
18라인 PrintWriter 객체를 생성하고 변수 pw에 참조시킨다. PrintWriter pw = new PrintWriter(file);
20,21라인 출력할 내용을 println() 메소드에 입력한다.
23라인 close()메소드로 파일 작업을 종료한다. 이 때 출력 버퍼에서 파일로 전송된다.
26라인 경로를 잘못 지정하여 오류가 발생할 경우(FileNotFoundException) catch 블록을 실행한다.
결과
경로를 맞게 지정하고 해당 파일이 없을 경우 파일이 생성된다.
파일 입력
File 클래스로 경로와 파일명을 설정하고, Scanner 클래스로 파일에서 출력문을 읽어온다.
파일 입/출력에서는 예외 처리(try~catch)를 꼭 해야 한다.
11라인 변수 filename에 파일 경로와 이름을 입력한 문자열을 참조한다. 이스케이프 문자로 입력한다.(\\)
13라인 File 객체를 생성하고 변수 file에 참조시킨다. File file = new File("파일경로\이름");
15라인 파일 입력할 때 예외 처리(try~catch)는 필수이다.
16라인 Scanner 객체를 생성하고 변수 fsc에 참조시킨다. Scanner fsc = new Scanner(file);
20라인 while문과 hasNext() 메소드로 모든 내용을 읽어올 때까지 반복한다.
hasNext(): 다음에 읽어올 라인이 있으면 true, 없으면 false를 반환한다.
21라인 읽어온 내용을 console창에 출력한다.
21라인 Scanner 클래스 사용을 종료한다.
24라인 경로를 잘못 지정하여 오류가 발생할 경우(FileNotFoundException) catch 블록을 실행한다.
파일 입력/출력 메소드 생성: MyFileRW 클래스
10라인 static이고 filename과 Object 배열을 인자를 갖는 fileWrite() 메소드를 선언한다.
11라인 File 객체를 생성하고 변수 file에 참조시킨다.
13라인 PrintWriter 객체를 생성하고 변수 pw에 참조시킨다.
15,16라인 for문으로 배열의 모든 항목 값을 출력한다.
18라인 파일 작업을 종료한다.
26라인 static이고 filename을 인자로 갖는 fileRead() 메소드를 선언한다.
27라인 File 객체를 생성하고 변수 file에 참조시킨다.
30라인 Scanner 객체를 생성하고 변수 fsc에 참조시킨다.
31,32라인 while문과 hasNext() 메소드로 모든 내용을 읽어올 때까지 반복한다.
파일 입력/출력 메소드 호출 예제1
7라인 MyFileRW 클래스의 fileRead() 메소드로 자바테스트.txt 파일을 입력한다.
10라인 menu 배열에 메뉴 5개를 저장한다.
11~14라인 members 배열에 인원 5명을 저장한다.
17라인 변수 filename에 파일 경로와 이름을 참조시킨다.
18라인 MyFileRW 클래스의 fileWrite() 메소드로 menu 배열을 출력한다.
19라인 MyFileRW 클래스의 fileWrite() 메소드로 members 배열을 출력한다.
→ 같은 파일에 다른 내용을 출력할 경우 마지막에 출력한 내용이 저장된다. (덮어 쓰기)
결과
members 배열이 출력된다.
파일 입력/출력 메소드 호출 예제2
45~47라인 for문과 if문으로 maths 배열에 틀린 문제를 저장한다.
50라인 MyFileRW 클래스의 fileWrite() 메소드로 maths 배열을 출력한다.
결과
'수업 일지 > JAVA' 카테고리의 다른 글
17일차 - [JAVA] 다형성/Comparator/Comparable 인터페이스 (0) | 2022.01.22 |
---|---|
16일차 - [JAVA] 날짜,시간 클래스/인터페이스 (0) | 2022.01.20 |
14일차 - [JAVA] 추상클래스 예제/ArrayList 예제/메소드 오버로딩 (0) | 2022.01.18 |
13일차 - [JAVA] Map/증감 연산자/추상 클래스 (0) | 2022.01.17 |
12일차 - [JAVA] ArrayList/향상된 for문 (0) | 2022.01.14 |
댓글