티스토리 뷰

Language/Java

Java - Array & Exception처리

ShinyOcean 2021. 1. 28. 11:26

안녕하세요 Shiny Ocean입니다.

 

 

자바를 주제로한 두번째 포스팅은 Array 와 Exception에 대하여 다루어 보겠습니다. 

배열의 사용방법은 C언어와 거의 동일하고, 자바에서는 프로그래머가 컴파일과정중 일부에러를

해결할수있는 방안이 있습니다. 이를 Exception처리 라합니다.

그리고 지난 Basic포스팅에서 언급한 입력문인 Scanner클래스의 사용방법 또한 간략하게 다루어보겠습니다.

 

예제 문제를 해결하며 알아보겠습니다.

 

Java 예제문제 1 - 배열생성 및 오류해결 문제

조건1. 사용자에게 배열의 크기를 직접 입력받는다.

조건2. 사용자에게 배열내에 초기화될 값을 직접 입력받는다.

조건3. 배열내에 초기화될 값이 중복되면 안된다, 이럴경우 오류메세지를 출력하고 다시 입력받는다.

조건4. 정수가아닌 값을 입력 받을시 오류메세지를 출력한다.

 

 

 

해결 과정)

 

조건1. 사용자에게 배열의 크기를 직접 입력받는다.

문제를 처음 제시 받았을 때 배열의 크기를 사용자에게 직접입력받는다는 부분에서 배열의length부분을 다시 보았습니다. 배열의length 선언과 동시에 같이 생성되고 배열의 마지막 +1 한값이(배열은 a[0]처럼 0번부터 시작하기때문) 해당 배열의 length라는 것을 알게되었습니다.

length를 이용하여 크기를 사용자에게 정수형으로 입력받고 배열의length를 입력받은 정수로 선언하는과정을 통하여 조건1을 만족시켰습니다.

Java code)

      Scanner sc = new Scanner(System.in);        //스캔 변수 생성

      int arr[];                                           //깂을 저장할 배열 선언  

      int num;                                          //배열의 크기를 입력받을 변수선언   

      System.out.print("Size of array = ");              

 

조건2. 사용자에게 배열내에 초기화될 값을 직접 입력받는다.

초기화될 값을 사용자에게 직접입력받기 위해서 스캐너를 선언하고 사용하였습니다,

반복문을 돌려 배열내에 조건에 맞게 값을 삽입했습니다. 삽입조건에 대해선 조건3,4에서 다루겠습니다.

반복문을 돌릴때는 배열의 length가 배열의 방번호보다 1큰 것을 고려하여 반복문을 코딩했습니다.

Java code)

import java.util.Scanner;

      Scanner sc = new Scanner(System.in)

 

for(int i=0; i<arr.length; i++) {

                                  System.out.printf("No."+(i+1) + " :  ");

                                  int tmp = (int)sc.nextInt(); ;                               //배열안에 넣을 변수를 선언 

                                                   int chk = 0;                                                                 

                                  for(int j=0; j<arr.length; j++) {

                                                   if(tmp == arr[j]) {                     // 배열의 값과 입력받은 값이 같을시 

                                                                    chk=1;                    //중복스위치 on

                                                                    break; 

                                                   }

                                  }

                                  

                                  if(chk == 1) {

                                                   System.out.println("중복 숫자 불가

                                                   i--;

                                                   continue;

                                  }

                                  arr[i] = tmp;                                                                               //배열을 초기화

                  }

                  

                  //배열의 출력 

                  for(int i=0; i<arr.length; i++) {

                                  if(i%10 == 0 && i != 0) System.out.println();

                                  System.out.print(arr[i] + " ");

                                  

                  } 

              

 

 

조건3. 배열내에 초기화될 값이 중복되면 안된다, 이럴경우 오류메세지를 출력하고 다시 입력받는다.

스위치 역할을 수행해주는 chk변수를 선언하고,

배열을 반복문으로 돌아가며 검사하고 중복되는 값이 있을경우 변수를 1또는 0으로 초기화하며

초기화되었을때의 if문을 수행하는 방식으로 중복값 오류를 검사하는 코딩을 수행하였습니다.

 

IF) arr[I] ==tmp

이럴경우 chk변수값을 1로 초기화, 후 오류메시지를 출력하는 if문 수행

 

Java code)

  for(int j=0; j<arr.length; j++) {

      if(tmp == arr[j]) {                     // 배열의 값과 입력받은 값이 같을시 

               chk=1;              //중복스위치 on

               break; 

      }

     }         

      if(chk == 1) {

     System.out.println("중복 숫자 불가 ");  //스위치가 켜질시 이전 배열로 초기화

       i--;

       continue;

     }

     arr[i] = tmp;                                                        //배열을 중복되는값없이 선언, 초기화

    }

 

조건4. 정수가아닌 값을 입력 받을시 오류메세지를 출력한다.

조건 4를 만족시키기 위해서는 자바에서만 가능한 EXCEPTION를 잡아내는 기능 try,catch 를 사용해야했습니다.

일단 정수가아닌 임의의 문자 s를 입력하여 어떠한 exception이 발생하는지 알아보았습니다.

콘솔창에 나타난바와 같이 “java.util.InputMismatchException” 이라는 문구가 출력되었습니다.

Exception이 발생하는 구간을 try{}문안에 삽입하고 catch문안에는 java.util.InputMismatchException 뒤에 변수 e를 붙여서 해당 exception이 발생할경우 오류문구를 출력하게 코딩을 실행했습니다.

Java code)

      try {    //    }

 

      catch (java.util.InputMismatchException e) {

                                                  System.out.println("입력값이 올바르지 않습니다. 프로그램을 종료합니다");          

                                 }    

이렇게 하니 아래와 사진과 같이 정상적으로 프로그램이 다시 동작후 종료 되었습니다.

전체 코드)

import java.util.Scanner;

public class Exam8_ArrayException {

   public static void main(String[] args) {           

      Scanner sc = new Scanner(System.in);        //스캔 변수 생성

      int arr[];                                           //깂을 저장할 배열 선언  

      int num;                                          //크기를 입력받을 변수선언   

      System.out.print("Size of array = ");              //배열의 사이즈는?

      num = sc.nextInt();                   //num변수에 키보드로 입력받은값 초기화 

     arr = new int[num];                  

      try {    

                  num = sc.nextInt();                               //num변수에 키보드로 입력받은값 초기화 

                  arr = new int[num];                                                                     //배열안에 입력받은 num 초기화

                                                                                                                                                                                       //배열의 크기를 설정             

                                                                                                                                                                                                      

                  for(int i=0; i<arr.length; i++) {

                                  System.out.printf("No."+(i+1) + " :  ");

                                  int tmp = (int)sc.nextInt(); ;                               //배열안에 넣을 변수를 선언 

                                                   int chk = 0;                                                                                                                                                                   //같은수 입력 스위치 변수 선언 

                                  

                                  for(int j=0; j<arr.length; j++) {

                                                   if(tmp == arr[j]) {                     // 배열의 값과 입력받은 값이 같을시 

                                                                    chk=1;                    //중복스위치 on

                                                                    break; 

                                                   }

                                  }

                                  

                                  if(chk == 1) {

                                                   System.out.println("중복 숫자 불가 ");  //스위치가 켜질시 이전 배열로 초기화

                                                   i--;

                                                   continue;

                                  }

                                  arr[i] = tmp;                                                                               //배열을 초기화

                  }

                  

                  //배열의 출력 

                  for(int i=0; i<arr.length; i++) {

                                  if(i%10 == 0 && i != 0) System.out.println();

                                  System.out.print(arr[i] + " ");

                                  

                  } 

              

      

//오류를 캐치하여 경고문을 출력

      catch (java.util.InputMismatchException e) {

                                                  System.out.println("입력값이 올바르지 않습니다. 프로그램을 종료합니다");          

                                 }    

      sc.close();

   }

}

 

 

결과 콘솔)

 

<EXCEPTION을 잡아내지 못하고 실행한 콘솔창>
<중복을 허용하지 않고 다시 입력을 받은 결과 콘솔>

<EXCEPTION을 잡아내고 실행한 콘솔창>

'Language > Java' 카테고리의 다른 글

Java - 간단한 끝말잇기 텍스트게임 구현  (1) 2021.01.28
Java - Abstract Class, 추상클래스  (0) 2021.01.28
Java - Class & 생성자  (1) 2021.01.28
Java - Basic  (1) 2021.01.28
Java - intro  (0) 2021.01.28
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함