목록JAVA (60)
먹었으면 뇌를 쓰자
자바에서 예외를 처리하는 구문은 다음과 같다. try&catch 구문 try { ... } catch (예외1){ ... } catch (예외2){ ... } finally { 예외에 상관없이 실행되는 코드 } try 안에 실행될 코드를 넣는다. try 안에서 예외가 발생하면 catch 안의 코드가 실행된다. 이 때 try 안의 남은 코드는 실행되지 않는다. 만약 예외에 상관없이 어떤 코드를 실행하려면 finally 안에 작성해주면 된다. RuntimeException RuntimeException은 실행 시 발생할 수도, 발생하지 않을 수도 있는 예외이다. 다음과 같이 RuntimeException을 상속한 예외를 선언하여 메소드 단에서 발생시킨다. class FoolException extends R..
(22.12.17 작성) 아래 코드에서 Predator 인터페이스에 디폴트 메소드 printFood()와 스태틱 메소드 speed()를 정의했다. 둘 다 구현체(Tiger, Lion)에 명시하지 않고 메인 메소드에서 호출하면 잘 작동되는데 그렇다면 둘의 차이는 무엇일까? interface Predator{ String getFood(); default void printFood() { System.out.printf("my food is %s\n", getFood()); } int LEG_COUNT = 4; // 앞에 public static final이 생략된 인터페이스 상수 static int speed() { // 메인 메소드 호출은 Predator.speed() return LEG_COUNT * ..

문제 잘못된 코드(*ArrayIndexOutOfBounds) 코드를 짜면서도 아 이건 틀리겠지만 한번 짜기나 해보자 하는 마음으로 짜봤다. 메인 메소드의 if문 조건에서 런타임 에러가 날 거란 예상도 했다. 그리고 실제로 그것이 일어났습니다. 그래도 어떻게 풀었는지 기록을 남겨보면 입력 값의 자릿수를 배열로 만들고 -> 이웃한 배열 값의 차가 같으면 count++ 함수 알고리즘 자체는 뭐... 아예 엉뚱한 건 아니다^^ 자릿수를 배열로 만들기보다 따로 구하는 편이 나았던 것 같다. 정답 다들 수학 1등급인가? 너무 예쁘고 깔끔한 코드다. 틀려서 기분이 안 좋았는데 이 코드를 보고 갑자기 기분이 좋아졌다. 관건은... 케이스를 세 가지로 나누는 것이었다. 첫번째 1~99까지는 자동 등차수열 두번째 100~..

문제 정답 dn 함수가 'private static'으로 선언된 이유는 다음과 같다. (자세한 정리 https://eat-then-brain.tistory.com/74) 메인 메소드는 public으로 실행을 위해 어디서도 접근이 가능하게 한다. 지금은 예제이니 상관은 없지만 만약 실무에서 쓴다고 하면 dn 함수는 같은 coding 클래스 안의 메인 메소드에서만 접근 가능하도록 private으로 선언한다. 또한 static을 선언하지 않아 인스턴스 소속 변수로 사용 가능하게 된다면 클래스를 통해서 호출될 수 없게 된다.

문제 정답 제출 버튼을 누르면 구현해야 할 클래스 Test와 리턴 값 ans가 만들어져있다. 배열 a의 정수 값들을 하나씩 더하는 for문을 작성하면 된다.

문제 잘못된 코드 이번엔 진짜 열심히 풀어봤는데... 틀려서 너무 아쉽다. 정답 점수 배열 score 뒤에 세번째 for문에 삽입될 if문에서 써야 하므로 병렬적인 두번째 for문이 아닌, 안고 있는 첫번째 for문에 위치시켰다. if문은 세번째 for문 안으로 이전에는 if문이 두번째 for문 안에 있었다. 그러다보니 최종 avg가 나왔을때, 그 평균을 기준으로 count++ 인데 avg가 최종까지 반복되는 작업 과정에서 count++을 할 수 없게 된다. 그래서 두번째 for문에서 최종 avg 를 다 구해놓고, 세번째 for문을 돌려서 배열 값과 최종 avg를 비교해 count++한다. 참고 - per 변수 삭제 (count/num)*100 으로 비율을 구하는 건 출력에서 바로 하기로 했다. 참고 -..

문제 정답 내가 생각했을 때는 이 문제를 풀면서 중요한 지점 3가지를 처리하는 게 중요하다. charAt() 로직을 처음 구상할 때 공백이나 줄바꿈이 없는 입력값에서 O와 X를 어떻게 구분할지 알 수 없었다. 이럴 때 charAt() 메소드를 쓰면 된다. 문자열에서 문자의 순서를 인식하여 반환하는 메소드이다. String st = "안녕하세요" 인 경우, charAt(1)은 '녕'이 된다. 점수와 총 점수 처음에는 총 점수 sum만 생각했는데, O면 +1, X면 0(초기화)을 담는 점수 count 변수도 필요하다. sum += count 가 된다. for문과 if문 사용 첫번째 for문은 OOXXOXXO 와 같이 정답과 오답 문자열을 받는다. 두번째 for문은 문자열을 한 문자씩 읽어나간다. 여기서 if..

문제 정답 4단계에서 거의 매번 틀리고 있어서 오답 코드를 보면 너무 우울해진다. 우울할 일까지는 아니지만 맞히고 싶은 열망이 커서 그런 것 같다. 정답 로직만 정리해보자. 중요한 점은 세 가지이다. 1. StringTokenizer -> for문 안에 넣은 코드가 틀렸었다. 내가 왜 StringTokenizer를 for문 안에 넣었을까 생각해봤다. 3단계 A+B-7 문제에서 for문 안에 넣었던 경험 때문에 그런 것 같다. (https://eat-then-brain.tistory.com/49) -> A+B-7 문제는 입력 값 자체가 여러 번 들어왔기 때문에 토큰화도 여러 번 했어야 했다. 그런데 이번 문제는 입력 값은 한 번만 들어오니까 토큰화를 반복하지 않는다. 2. (arr [ i ] / max) ..

문제 잘못된 코드 이번 로직은 꽤 잘 짰다고 생각했는데... 바로 틀렸습니다!!! 정답 일단 종전에 for문을 2개 쓰던 걸 1개로 압축했다. 내가 잘못 쓴 코드는... 기본적으로 배열의 첫 번째 값을 서로 다른 값에 포함시키기 위해 num에 1개를 넣어놓고, 첫 번째 값과의 비교부터 출발, 총 9번의 비교를 반복하도록 했다. 최종적으로 rest[8]과 rest[9]까지 비교해서, 다를 때마다 num을 1씩 증가시켰다. int num =1; for(int k=0;k