본문 바로가기

공부일지

231004 (Java)

배열의 오름차순

  1. 앞에서부터 가장 작은 숫자를 대입하는 방법 (선택)
  2. 각 자리를 비교하여 교체하는걸 반복하는 방법 (버블)
  3. java 메소드를 이용하여 정렬 Arrays.sort
package exam.array;

import java.util.Arrays;

public class Ex02_Array {
	public static void main(String[] args) {
		int[] numbers = { 3, 5, 7, 9, 1, 2, 4, 10, 8 };
		int[] numbers2 = { 3, 5, 7, 9, 1, 2, 4, 10, 8 };
		int[] numbers3 = { 3, 5, 7, 9, 1, 2, 4, 10, 8 };

		for (int i = 0; i < numbers2.length; i++) {
			for (int j = i+1; j < numbers2.length; j++) {
				if (numbers2[i] > numbers2[j]) {
				int temp = numbers2[i];
				numbers2[i]=numbers2[j];
				numbers2[j]=temp;
				}
			}
			System.out.println(Arrays.toString(numbers2));
		}
		for (int i = 0; i < numbers2.length; i++) {
			System.out.print(numbers2[i] + " ");
		}

		System.out.println();

		for (int i = 0; i < numbers.length - 1; i++) {
			for (int j = 0; j < numbers.length - 1; j++) {
				if (numbers[j] > numbers[j + 1]) {
					int swap = numbers[j + 1];
					numbers[j + 1] = numbers[j];
					numbers[j] = swap;
				}
			}
		}
		for (int i = 0; i < numbers.length; i++) {
			System.out.print(numbers[i] + " ");
		}
		System.out.println();
		Arrays.sort(numbers3);
		for (int i = 0; i < numbers3.length; i++) {
			System.out.print(numbers3[i] + " ");
		}		
	}
}

예외

  • 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류
  • 일반 예외와 실행 예외가 잇다.

null pointer 오류 테스트

  • NullPointerException을 발생시키기
  • nul pointer exception을 예외시키기
public class Ex01_NullPointer {
	public static void main(String[] args) {
		
		String[] a=null;
		if (a!=null) {
		System.out.println(a[0]);
		}
		System.out.println("여기");
	}
}
  • 참조 타입의 변수를 null로 초기화 후 참조하기 위한 코드를 사용하면 발생
  • 원하는 값이 null이 아닌지 체크 후 동작하도록 설정하기

숫자 관련 오류

  • 숫자 이외의 값을 숫자로 바꾸려고 하면 오류가 발생(numberformat)
  • 어떤 수를 0으로 나누려고 하면 오류가 발생(by zero)
public class Ex02_Number {
	public static void main(String[] args) {
		String str = "숫자";
		int num = Integer.parseInt(str);
				
		int zero = 0;
		if (zero!=0) {
		System.out.println(10/zero);
		}
	}
}
  • 문자열을 숫자로 바꿔주는 wrapper클래스 사용 시 문자열에 숫자가 아닌 값을 넣을 경우 numberformat 오류가 발생한다.

try-catch

  • 예외가 발생할 것 같은 코드를 try, catch로 묶어서 예외가 발생 시 catch가 동작하도록 짠다.
  • catch에는 (exception e)가 같이 붙는다.
public class Ex01_TryCatch {
	public static void main(String[] args) {
		String str ="숫자";
		try {
		Double.parseDouble(str);
		
		} catch(Exception e) {
			System.out.println("오류 발생");
			System.out.println(e.getMessage());
			e.printStackTrace();
		}
	}
}

try-catch-finally

  • finally : 무조건 실행되는 코드를 넣어준다.
  • try 이후의 코드가 실행되지 않는 경우도 생기기 때문에 finally 에 어떤 경우에던 실행되는 코드를 넣는다.
public class Ex02_TryCatchFinal {
	public static void main(String[] args) {
		String str ="숫자";
		try {
			System.out.println("코드1");
			System.out.println("코드2");
		} catch (Exception e) {
			System.out.println("예외 발생");
		} finally {
			System.out.println("코드4");			
		}
	}
}

try-catch order

  • catch를 여러개 쓰고 다양한 오류 타입을 지정하여 조건으로 설정할 수 있다.
public class Ex03_TryCatchOrder {
	public static void main(String[] args) {

		try {
			String str = "숫자";
			int num = Integer.parseInt(str);
			System.out.println(str);
			System.out.println(0 / 0);
		} catch (NumberFormatException e) {
			System.out.println("문자열 숫자 변경 오류입니다.");
		} catch (ArithmeticException e) {
			System.out.println("0으로 나눠서 오류입니다.");
		} catch (NullPointerException e) {
			System.out.println("Null 오류입니다.");
		} catch (Exception e) {
			System.out.println("그 외 오류입니다.");
		} finally {
			System.out.println("프로그램 종료");
		}

	}
}

테스트

  • Scanner를 사용하여 -1의 값이 입력되기 전 까지 계속해서 숫자를 입력 받음.
  • 입력 된 숫자를 계속해서 누적 합을 구함
  • 단, 숫자 이외의 값이 입력되면 잘못된 입력!!!이라고 표시하고 다시 입력을 받음.
  • 이 프로그램은 -1 입력 전까지 비정상 종료가 없는 프로그램
import java.util.Scanner;

public class Test01_TryCatch {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int sum = 0;
		while (true) {
			System.out.println("숫자를 입력하세요");
			String str = scan.nextLine();
			try {
				int num = Integer.parseInt(str);
				if (num == -1) {
					break;
				}
				sum += num;
				System.out.println("합 : "+ sum);
			} catch (Exception e) {
				System.out.println("잘못 된 입력!");
			}
		}
		System.out.println("프로그램 종료");
	}
}

'공부일지' 카테고리의 다른 글

231005 (Java)  (0) 2023.10.05
231005 (HTML)  (1) 2023.10.05
231004 (HTML)  (0) 2023.10.04
230927 (HTML)  (0) 2023.09.27
230926 (Java)  (0) 2023.09.26