본문 바로가기

자바

(9)
[Kotlin] 자바로 쓰인 안드로이드 프로젝트를 단순히 Kotlin으로 컨버팅해보자 이전동안 자바에 익숙해있던 중에 이제 꽤나 업계에서 널리 쓰이는것으로 보이는 코틀린을 실제로 사용하고 익숙해져보기로 했다. 기본 입문서정도는 훑어서 익혔으나, 훑은 것들은 실제로 사용하고 경험해보기 전에는 머릿속과 손끝에서 휘발되기 마련이다. 단순한 첫단계로 새로 만든 예시 앱을 코틀린으로 컨버팅하고, 이를 입문서를 참조하며 찬찬히 살펴보기로 했다. 과정은 설명이 필요 없으리만치 매우 단순하며 간단하다. 1. OS에 따라 다르겠지만 윈도우 기반 안드로이드 스튜디오에 경우 ctrl + shift + a 를 누르면 옵션들을 검색해 볼 수 있는데, 여기에서 convert java to kotlin 옵션을 찾을 수 있다. 2. 클릭하여 옵션을 실행하면 약간의 시간소요 이후 다수의 java 파일이 코틀린으로(.k..
[JAVA] split과 regex를 활용해 문자열 뽀개기 어떤 사정으로 인해 String을 문자와 숫자로 나눠보려는 마음에 여러 시도를 해보았으나 잘 되지않아 구글신님의 도움을 빌렸다. 그분께 신탁을 맡겨본 결과 split과 regex(정규표현식)을 통해 손쉽게 문자열을 뽀갤 수 있다는 사실을 알았다. 우선 String input에 입력할 문자열을 입력하고, 이를 나눈 문자열을 저장하는 문자열 배열 String part[] 를 선언해둔다. 그리고 저장하려는 문자열 배열에 아래와 같이 작성해주면 본래 의도대로는 아니었으나, 기존 목표였던 숫자만을 선별해 저장하는데는 성공할 수 있었다. 이제 뽀갠 문자열을 필요에 맞게 사용하면 된다. 반대로 문자열만을 선별하자면 정규표현식을 또 요리조리 만져야만 하겠다. 아직 정규 표현식을 제대로 이해하고 활용하기는 좀 어렵다는 ..
[JAVA] double과 int 간의 형변환을 항상 주의할 것. 백준문제 4344번을 진행하면서 출력을 소숫자리까지 해야하기 때문에 double 배열을 사용하였는데 알고리즘은 문제 없는 것 같은데 0.000%로 출력이 되어 확인을 해보니 평균을 넘는 학생 수인 count와 student가 int형 변수였고, 이에 double형 배열에 값이 들어가지 않은 것이다. 수정 이후엔 올바르게 출력 되었으며 반올림 및 소숫자리 출력을 위해 String.format("형식", 변수) 를 사용하였다. string 변수에 String.format("%.3f", rate[i]) 를 넣어준 후 그대로 sout으로 %를 달아 출력해주면 된다. 번외로 입력받은 수를 거꾸로 돌린 뒤 출력하는 문제가 있었는데, 여기서도 요즘 자주 애용하는 toCharArray를 사용해줬는데, char에 저장된..
[JAVA] ArrayList를 복사하고 정렬하고 싶을 때. 백준 문제 2822번을 풀기 위해 처음에 점수 입력을 Integer형 ArrayList에 담고 이를 또다른 ArrayList에 복사하여 오름차순 정렬 후 상위 5개 점수 이외에는 삭제. 그리고 처음 입력한 ArrayList와 복사해 정렬한 ArrayList를 비교해 동일한 점수의 항목이 있을 때 문제 번호를 출력하도록 했다. 뭔가 좀 더 단순하게 하고 싶었는데 ArrayList를 복사하는게 그냥 일반 변수 복사하듯이 되지 않는다는 것과 문제 번호를 출력해야 하는데서 하위 점수들을 삭제하다 보니 조금 복잡해졌다. ArrayList input = new ArrayList();ArrayList sortedList; // 복사해줄때 객체화 되기 때문에 선언만 해도 무방. sortedList = ..
[JDBC] jdbc driver class not found 오류시 수업시간에 배운대로 mysql connector를 프로젝트의 속성에서 Java build path에 추가해주었고 ( mysql-connector-java-5.1.42-bin 파일) 그래도 jdbc driver class not found 오류가 생겨 WEB-INF/lib 에도 import로 같은 파일을 추가해주었는데 그래도 되지 않아 짧게 찾아보니 프로젝트를 돌리고 있는 아파치 서버에 돌아가는 모든 프로젝트에 같은 작업을 해 주어야만 오류없이 실행이 된다는 것이었다. 그러니까 아래에서 지금 실습을 위해 아파치서버에 적용한 프로젝트가 두개였는데 내가 mysql connector를 적용한 프로젝트는 TestJSP 뿐이었고, 2010 프로젝트에는 적용이 되지 않은 채 Configured 항목에 Add 되어 함..
[Codility] LongestPassword - java.util.regex 를 활용해 조건을 만족하는 문자열 걸러내기 코딜리티에서 Indeed Prime 2015 Challenge 항목에 포함된 Task이다. 문제는 주어진 문자열에서 띄어쓰기로 분간된 암호들 중 주어진 조건을 만족하는 가장 긴 암호의 길이를 return하는 것이다. 암호의 조건은 숫자를 무조건 포함하며 홀수 개의 숫자만을 가지고, 짝수 개의 문자만을 가질 수 있다. 입력 된 문자열에서 유효한 암호가 존재하지 않을 때에는 -1을 return 해주어야 한다. InteliJ에서 실행 및 출력을 위해 직접 문자열을 정의해주었고 return 값을 return하지 않고 sout으로 출력하도록 하였다. 처음에 아 드디어 됬다고 하다가 점수가 10점밖에 안나와서 뭐가 문제일까 하다가.. 문자와 숫자에 걸린 홀수개 혹은 짝수개의 조건이 있던 것을 나중에 알았다. 여기에..
[자바 예외처리] Exception() 에 메시지 설정해서 던지기 이번 과제는 try, catch, throw, throws 등을 활용한 간단한 프로그램을 만드는 것인데, Exception 을 활용하여 대충 설계를 마쳤는데 총 실행된 세개의 메소드에서 예외를 던진 메소드로부터 메세지를 얻어 출력하고 싶었는데 어떡하지 어떡하지 하다 방법을 찾았다. Exception을 의도적을 발생시키는 구문이 throw new Exception() 인데, 괄호 안에 담고싶은 메세지를 넣어두기만 하면 된다. public class Main extends Exception{ public static void main(String[] args) throws Exception {// TODO Auto-generated method stub// try문 안에서 메소드 세개를 실행한다. 예외는 t..
자바 스윙 레이아웃 끼리 정렬하기 원래 스윙을 잘 다루지 못해서 창 크기에 상관없이 고정된 크기로만 내용을 출력하게끔 시켰다가 창 크기에 상관없이 유동적으로 바뀌었으면 해서 내용을 찾던중에 안드로이드와 비슷하게 스윙의 BorderLayout 을 사용해서 구성 패널들을 창 크기에 맞게 조절해줄 수 있었다. 우선 기본 패널 X와 X에 딸린 A, B, C의 패널이 존재할때 A를 맨 위에 배치하고자 하면 X.add(A, BorderLayout.NORTH); 다음 B를 좌측에, C를 가운데부터 우측까지 두고자 하면 B.setPreferredSize( new Dimension(300, 300));X.add(B, BorderLayout.WEST); C.setPreferredSize( new Dimension(300, 300));X.add(C, Bor..