목록Error solution (60)
코딩항해기
오류 메세지 기록Unresolved compilation problems 람다식에 사용된 매개변수명과 지역변수명이 동일해서 충돌이 났다. 둘 중 하나의 변수명을 변경해주면 해결된다. 람다식 내부에 정의된 로컬 변수는 final이거나 사실상 final이어야 하는데 그렇지 못해 벌어진 오류이다.람다식 내부에 새 변수를 선언해 사용하여 해결했다.
오류 메세지 기록SQL Error [1] [23000]: ORA-00001 : unique constraint ... PK로 설정한 값이 중복되는 데이터를 새로 넣으려고 할 때 발생하는 오류이다.PK값을 중복되지 않는 값으로 설정한 뒤 다시 insert를 실행해야한다.
오류 메세지 기록IOException입출력 작업 중에 발생하는 예외로, 파일이 존재하지 않거나 파일에 접근할 수 없는 경우 등의 입출력 관련 오류 시 발생 입출력 작업 때에는 IOException이 발생할 가능성을 항상 지니고 있기 때문에 try-catch 또는 throws를 통해 해당 예외를 처리할 것을 강제하고 있다. 해당 오류가 발생한 코드에서는 try-catch를 통해 예외처리를 해둔 상태였는데, 계속해서 IOException catch에 걸리는 상황이었다. ( IOException 발생! ) 상단에서 경로, 파일명에 대한 검증은 이미 끝난 상태였기 때문에 저장값이 없는 경우를 의심하게 되었다.그래서 IOException이 발생하기 직전에 로그를 찍어 저장값을 확인해보았지만 정상적으로 잘 넘어오..
오류 메세지 기록 NumberFormatException 숫자 형식 오류로 Test01 클래스 39번 라인에서는 int 변수 = Integer.parseInt(값)을 사용했는데, 매개변수(Arqument)로 들어온 값이 null이라서 발생한 오류이다.Integer.parseInt()는 매개변수로 들어온 String값을 Integer타입으로 형변환시켜주는 코드이기 때문이다.(null은 String이 아니다.) 즉, 원인은 오류 발생 상단의 while문을 통과하고나면 매개변수에 String을 전달하기 위해 만든 변수에 무조건 null이 저장이 되어 Integer.parseInt()의 매개변수에 null이 전달이 되었기 때문이다. 잘못된 while문을 제거하여 해결하였다. *Integer.parseIn..
오류 메세지 기록local variable value defined in an enclosing scope must be final or effectively final Cal 클래스는 외부클래스 Test01의 메서드 안에 선언된 로컬 클래스인데 사용할 수 없는 지역 변수인 int value에 접근하고 있기 때문에 발생하는 오류이다. 로컬클래스는 외부 클래스의 필드 값에 private가 붙어있어도 접근가능하지만 final이 붙지 않는 지역변수에는 접근할 수 없다. value를 필드로 옮겨주거나 final를 붙여 상수화 해주어야한다.
오류 메세지 기록ArithmeticException: / by zero ArithmeticException: / by zero는 정수를 0으로 나누었을 때 발생하는 exception이다.실수 나누기 0일 때에는 발생하지 않으며 정수 나누기 0일 때 발생한다. 이로 인해 프로그램이 종료되는 것을 막기 위해서는 조건문을 사용하여 나누는 숫자가 0이 되지 않도록 하거나, trycatch문을 통해 해당 오류를 catch하여 프로그램 비정상 종료를 막을 수 있다.
오류메세지 기록NullPointerException NPE는 주어가 없어서 발생하는 에러이다.즉, 객체가 없어서 발생하는 에러다.객체 지향 언어는 메서드를 객체가 실행한다. (주어 = 메서드를 실행시키는 주체) 따라서 이 코드의 문제 되는 부분을 가보면, if (stuDTO.getCondition().equals("ALL")) {...} 코드가 나오게 되는데 여기서 객체가 되는 stuDTO나 condition의 값에 문제가 있음을 알 수 있다.매개변수로 비어있지 않은 stuDTO를 넘겨주었기 때문에 stuDTO 안에 있는 condition의 값을 확인해보니 condition값이 누락된 것을 확인 할 수 있었다. condition값을 setCondition으로 stuDTO에 넣고 다시 확인해보니 잘 돌..
오류메세지 기록 InputMismatchException 해당 코드에서는 입력값을 nextInt()로 받고 있는데,사용자 입력값으로 int타입이 아닌 String 타입이 들어와서 발생하는 오류이다. 즉, 입력값과 타입 불일치로 발생한 오류이다. 이 경우 try-catch를 통해 해당 오류가 발생할 시 다시 입력값을 받도록 할 수 있다.
오류 메세지 기록NegativeArraysSizeException 이 오류가 발생한 코드에서는 배열의 길이를 입력값으로 받아 생성하고 있는데,해당 부분에서 발생한 오류이다. 이는 배열의 길이가 음수로 들어갈 수 없기 때문에 뜬 오류로 배열 길이 값을 받을 때 0이하의 값이 들어가지 않도록 유효성 검증을 추가해주면 된다.int num; // 사용자가 입력한 정수while(true) { //> "); num=sc.nextInt(); if(0
오류메세지 기록ArrayIndexOutOfBoundsException 코드를 테스트하던 중 오류메세지가 떴다. 뜬 오류는 ArrayIndexOutOfBoundsException으로,해당 코드에서는 index의 값을 입력받아 해당하는 값을 불러올 때 오류가 발생한 것이다. 뒤에 붙은 index 4 out of bounds for length 3이라는 메세지대로배열의 길이는 3인데 index값으로 4가 들어왔다는 오류메세지이다. (배열 범위 초과) 유효값 검증을 추가하여 해당 오류가 발생하지 않도록 처리하였다.이제 사용자가 배열 길이를 벗어나는 값을 입력할 시 안내 메세지가 나오며 정상적인 값을 다시 입력할 수 있다.int[] stu = new int[3]; // 학생 점수 저장할 배열while (true)..