https://veneas.tistory.com/entry/IntelliJ-%EC%9D%B8%ED%85%94%EB%A6%AC%EC%A0%9C%EC%9D%B4-%EC%BD%98%EC%86%94-%ED%95%9C%EA%B8%80-%EC%B6%9C%EB%A0%A5-%EA%B9%A8%EC%A7%90 [IntelliJ] 인텔리제이 콘솔 한글 출력 깨짐 목차 증상 한글을 출력하면 깨지는 현상이 발생하게 됩니다. 해결 File Encodings, Edit Custom VM Options 설정을 통해 해결할 수 있습니다. 1. File Encodings 1. File > Settings...(preferences) 2. File En.. veneas.tistory.com 위 글대로 하면 출력 시 한글 깨짐 현상이 해결..

날짜와시간 java.util.Date 날짜와 시간을 다룰 목적으로 만들어진 클래스(JDK1.0) Date의 메서드는 거의 deprecated되었지만, 여전히 쓰이고 있다. java.util.Calendar Date클래스를 개선한 새로운 클래스(JDK1.1). 여전히 단점이 존재 java.time패키지 Date와 Calendar의 단점을 개선한 새로운 클래스들을 제공(JDK1.8) Calendar클래스 추상 클래스이므로 getInstance()를 통해 구현된 객체를 얻어야 한다. 더보기 추상 클래스이므로 getInstance()를 통해 구현된 객체를 얻어야 한다. 복습 링크 2022년 10월 1일 date.roll(Calendar.MONTH, -8); // 월(MONTH)에서 8을 뺀다. -> 2022년 ..

문제 풀러가기✍🏻 서론 역대급 오답 제출이 많았던, 시행착오가 많았던 문제다. index를 익숙하게 다루지 못 했기 때문이다. 시행착오(Trial&Error) 51132976 - 컴파일 에러 Main.java:10: error: ';' expected for(int i = 0 i < 28i++) { ^ Main.java:10: error: ';' expected for(int i = 0 i < 28i++) { ^ Main.java:11: error: ';' expected arr[i] = Integer.parseInt(br.readLine()) ^ 3 errors ;를 빼먹어서 컴파일 에러가 발생했다. 51132993 - 컴파일 에러 Main.java:19: error: variable a might n..

문제 출처 - https://www.acmicpc.net/problem/10807 서론 일요일에도 알고리즘 문제를 풀어야겠지. 시행착오(Trial&Error) 풀이(Solution) '개수 세기 문제'와 동일한 방법으로 문제에 접근했다. BufferedReader&BufferedWriter를 이용하는 방법을 연습하는 차원으로 문제를 풀었다. 순서 try-catch문 '예외처리' BufferedReader, BufferedWriter 객체 생성 StringTokenizer 생성 br.readLine()으로 입력 처리 bw.write()으로 출력 처리 br.close(), bw.close()로 처리 완료 코드 1. java.util.Scanner 이용 방법 import java.util.Scanner; cl..

문제 풀러가기✍🏻 서론 비슷한 문제 유형이라 생각했지만, 문제는 나에게 "더 이상 for문 말고 while문을 사용해서 문제를 풀어봐!" 라 말해주는 듯 했다. 시행착오(Trial&Error) 풀이(Solution) while문을 사용할 때, while(조건식) 에서 조건식의 조건만 사용하려 반복문을 작성하면 답이 안 나온다. 반복문 내 지역변수가 조건을 충족할 때, while문을 빠져나갈 수 있도록 조건문을 작성했다. 코드 import java.io.*; import java.util.StringTokenizer; class Main { public static void main(String[] args) { try { BufferedReader br = new BufferedReader(new Inp..

Math클래스 수학 관련 static메서드의 집합 round()로 원하는 소수점 아래 세 번째 자리에서 반올림하기(복습 차원) 더보기 수학 관련 static메서드의 집합 지금까지 Math.round(), Math.random()을 배웠다. Math.round()는 반올림, Math.random()은 난수를 구할 때 쓰는 메서드이다. round()로 원하는 소수점 아래 세 번째 자리에서 반올림하기(복습 차원) Math클래스의 메서드 더보기 RoundTest.java 실습하기

StringBuffer클래스 String처럼 문자형 배열(char[])을 내부적으로 가지고 있다. 그러나, String클래스와 달리 내용을 변경할 수 있다(mutable). 더보기 String처럼 문자형 배열(char[])을 내부적으로 가지고 있다. StringBuffer클래스도 문자열을 저장&다루기 위한 클래스이다. public final class StringBuffer implements java.io.Serializable { private char[] value; ... } 그러나, String클래스와 달리 내용을 변경할 수 있다(mutable) String클래스는 내용 변경이 불가한 불변클래스이다. 하지만, StringBuffer는 '내용' 변경 가능한 가변 클래스이다. 문자열 "abc"를 저..

join()과 StringJoiner Join()은 여러 문자열 사이에 구분자를 넣어서 결합한다.(static메서드) 더보기 문자열과 기본형간의 변환 숫자를 문자열로 바꾸는 방법 문자열을 숫자로 바꾸는 방법 더보기 숫자를 문자열로 바꾸는 방법 문자열을 숫자로 바꾸는 방법 Ex9_10 실습하기 더보기 System.out.println(String.join("",strVal,"+",strVal2,"=")+sum); // 문자열 결합 방법 1 System.out.println(strVal+"+"+strVal2+"="+sum2); // 문자열 결합 방법 2 문자열 결합을 할 때, String객체가 계속 새로 만들어지기 때문에, 방법 2처럼 여러 문자열을 계속 더하는 건 성능이 떨어질 수 있다. 그런데 방법 1처..

문제 풀러가기✍🏻 서론 '별 찍기 -1' 문제에 이어서 BufferedReader, BufferWriter를 연습하는 차원으로 문제에 접근했다. 거기에 다른 패턴의 별 찍기가 나와서 해결 방법을 20분 넘게 고민했다. 시행착오(Trial&Error) 50966965 - 컴파일 에러 Main.java:19: error: illegal start of expression str -= *; ^ Main.java:19: error: illegal start of expression str -= *; ^ 2 errors 문자 또는 문자열로 *을 써줘야 하는데 "" 또는 ''을 사용하지 않아서 에러가 발생했다. 50966979 - 컴파일 에러 Main.java:20: error: illegal start of ex..

String클래스의 생성자와 메서드 더보기 CharSequence CharSequence는 인터페이스다. 인터페이스의 장점 중 하나는 서로 관계 없는 클래스들의 관계를 맺어줄 수 있다는 것이다. 문자형 배열(문자열)을 다루는 클래스들이 위의 클래스들이다. StringBuffer와 StringBuilder는 거의 같은 클래스다. String, CharBuffer, Segment도 문자열을 다룬다. 이런 것들이 문자형 배열을 다룬다는 공통점이 있다. 그런데 이 클래스들은 상속계층도가 다 다르다. 공통 조상이 없다. 공통 조상이 있다면, 다형성을 이용해서 그것을 매개변수 타입으로 하면 좋겠지만, 공통 조상이 없기 때문에 CharSequence인터페이스를 만들고 이 클래스들이 다 구현하게 만들면 된다. 그렇게 ..

String클래스 문자열을 다루기 위한 클래스 데이터(char[]) + 메서드(문자열 관련) 내용을 변경할 수 없는 불변(immutable) 클래스 ⭐️ 덧셈 연산자(+)를 이용한 문자열 결합은 성능이 떨어짐 문자열의 결합이나 변경이 잦다면, 내용 변경이 가능한 StringBuffer클래스를 사용하면 된다. 더보기 내용을 변경할 수 없는 불변(immutable) 클래스 String a, b가 있을 때, a = a + b하게 되면, 문자열 "ab"가 만들어진다. 이때, 자칫 문자열 내용이 바뀌는 것처럼 보여진다. 위 문장이 실행되는 과정을 보면, String a = "a"; 와 String b = "b"; 문장이 실행되면서 "a"와 "b"를 담는 객체가 각각 만들어진다. 그리고 a + b에 따라 "ab"가..

hashCode 객체의 해시코드(hashCode)를 반환하는 메서드 Object클래스의 hashCode()는 객체의 주소를 int로 변환해서 반환 equals()를 오버라이딩하면, hashCode()도 오버라이딩해야 한다. ⭐️ equals의 결과가 true인 두 객체의 해시코드는 같아야 하기 때문이다. ⭐️ System.identityHashCode(Object obj)는 Object클래스의 hashCode()와 동일 더보기 public class Object { // 해시코드 : 정수값 반환, 해싱 알고리즘(11장 컬렉션 프레임 웍) ... // native메서드 : OS의 메서드(C언어), JNI public native int hashCode(); // 내용 x, 객체마다 다른 값을 반환하기 때문..

Object클래스 모든 클래스들의 최고 조상. 오직 11개의 메서드만을 가지고 있다. notify, wait() 등은 쓰레드와 관련된 메서드이다. 더보기 public Class getClass() 객체 자신의 클래스 정보를 담고 있는 Class인스턴스를 반환한다. class Class { } 클래스 중에 첫 글자가 대문자인 Class가 있다. 클래스의 정보를 담기 위한 클래스다. 자바 소스파일을 컴파일 하면 클래스 파일(*.class)이 나온다. 예를 들어, Hello.java 파일을 컴파일하면 Hello.class파일이 생긴다. 이 클래스 파일이 메모리에 올라갈 때 Hello클래스의 Class객체가 자동으로 생성된다. 이게 바로 Hello클래스의 Class객체이다. 이 객체엔 Hello클래스의 정보가 ..

문제 풀러가기✍🏻 서론 Scanner를 졸업하고 BufferedReader, BufferWriter를 연습하는 차원으로 문제에 접근했다. 시행착오(Trial&Error) 50966086 - 컴파일 에러 출력예시를 참고하기 위해 코드에 복붙했는데, 지우거나 주석처리를 하지 않아서 '컴파일 에러'가 발생했다. 50966095 - 컴파일 에러 Main.java:12: error: unreported exception IOException; must be caught or declared to be thrown int num = Integer.parseInt(br.readLine()); ^ 1 error IOException은 'Exception클래스와 자손들'에 속한다. 따라서, '예외처리' & 'try-ca..

사용자 정의 예외 만들기 조상은 Exception과 RuntimeException 중에서 선택 ⭐️ 문자열을 매개변수로 받는 생성자를 넣어준다. ⭐️ class MyException extends Exception { MyException(String msg) { // 문자열을 매개변수로 받는 생성자 super(msg); // 조상인 Exception클래스를 선택할 수 있다. } } 예외 되던지기(exception re-throwing) 예외를 처리한 후에 다시 예외를 발생시키는 것 호출한 메서드와 호출된 메서드 양쪽 모두에서 예외처리하는 것 예제 8-12 Ex8_12 실습하기 더보기 예외 처리 방법 예외 처리 예외 떠넘기기 분담 처리 연결된 예외(chained exception) 한 예외가 다른 예외를..

👨💻증상① "클래스패스는 이미 설정된 상황임을 알려드립니다" ~ echo $CLASSPATH .:/lib/tools.jar:/Users/jiwoo/java_basic/java_basic/bin 나는 분명 IDE(IntelliJ)에서 소스파일(AnnotationEx3)을 만들었다. 그리고 파일을 실행시키려고 명령어를 입력했더니 에러 메시지가 뜬다. 어쩌라고? 🤷♂️ 이 에러가 발생하면 확장자명을 제거하고 다시 쳐보곤 한다. 내 버릇이다. 🎨해석① java.lang.NoClassDefFoundError: ver3/ch12/AnnotationEx3/AnnotationEx3 (wrong name: AnnotationEx3) ~/java_basic/java_basic/src/ver3/ch12/Annotat..

예외 처리 방법 종류 ⭐️ try-catch문(직접 처리) 예외 선언하기(예외 떠넘기기, 알리기) 은폐, 덮기(빈 catch블럭) 더보기 예외 선언하기는 예외 처리와 다르다. 예외를 자기가 처리하는 게 아니라, 자기를 호출한 사람한테 예외 처리를 떠넘기는 것이다. 상사가 나에게 일을 시켰는데, 문제가 발생했다면 직접 처리(try-catch문)할 수 있다. 아니면 그 문제를 일을 시킨 상사에게 보고할 수도 있다. 그것을 '예외 선언'이라 한다. 메서드에 예외 선언하기 ⭐️ 메서드가, 호출 시 발생가능한 예외를 호출하는 쪽에 알리는 것 더보기 | 참고 | 예외를 발생시키는 키워드 throw와 예외를 메서드에 선언할 때 쓰이는 throws를 잘 구별하자. 따라서 IllegalMonitorStateExcepti..

문제 출처 - https://www.acmicpc.net/problem/2884 시행착오(Trial&Error) 대입 연산자(=) 대신 등호(==)로 잘못 작성하여 컴파일 에러가 발생했다. 풀이(Solution) 입력 시간 대비 45분 전의 시간을 알람 시간으로 설정하는 문제이다. 시간을 앞으로 당기는 작업이므로, 24시는 고려할 필요 없이 0시만 고려하면 된다. 즉, 0시를 기준으로 앞으로 당기게 되면, 0시 대신 23시로 바꿔줘야 한다. 따라서, 분기는 입력받은 시간이 0시인지 아닌지를 기준으로 해주면 된다. 그리고, 입력받은 알람시간의 분(minute)이 45분 이전인지 아닌지로 그 분기 안에서 나눠주면 된다. 코드(Code) import java.util.Scanner; class Main{ pu..

문제 출처 - https://www.acmicpc.net/problem/2525 시행착오(Trial&Error) 단순 사칙연산이 아니라, 시간 개념으로 생각하다보니 실수를 많이 했다. 풀이(Solution) 조건문 문제 답게 분기를 어떻게 할 것인가를 파악하는 것이 핵심이다. 즉, '분류'를 잘 해야 한다. 같은 눈이 3개인 경우, 2개인 경우, 모두 다를 경우를 어떻게 분기할지 잘 생각해야 한다. 우선, 시작 시간에서 작업 시간을 더했을 때, 24시를 기준으로 '분기'했다. 그리고 그 분기 안에서 '분'을 기준으로 분기했다. 마지막으로 작업 결과 24시가 된 경우 24시를 0시로 수정해주면 끝난다. 코드(Code) import java.util.Scanner; class Main { public sta..

문제 풀러가기✍🏻 시행착오(Trial&Error) 분기를 수정하는 과정을 거쳤다. 풀이(Solution) 조건문 문제 답게 분기를 어떻게 할 것인가를 파악하는 것이 핵심이다. 즉, '분류'를 잘 해야 한다. 같은 눈이 3개인 경우, 2개인 경우, 모두 다를 경우를 어떻게 분기할지 잘 생각해야 한다. 코드(Code) import java.util.Scanner; class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] dice = new int[3]; for(int i = 0 ; i < dice.length; i++) { dice[i] = sc.nextInt(); } // 1. 같은 눈이 3..