배열의 오름차순
- 앞에서부터 가장 작은 숫자를 대입하는 방법 (선택)
- 각 자리를 비교하여 교체하는걸 반복하는 방법 (버블)
- 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 |