[JAVA] 자바 자잘한 것 모음

성채원·2024년 6월 2일

들어가기에 앞서..

자바 공부하면서 까먹은 쫌쫌따리들이 굉장히 많더라고요! 그래서 정리할겸 겸사겸사 써봅니다.


if를 쓰면 else도 무조건 써야한다.

else if (c.equals(div)) {
            if (b==0) {
                System.out.println("divide by zero");
            } 
            System.out.printf("%.1f", (double)a/b);
            }

처음에 이렇게 썼다가 b==0일때의 출력 무한굴레에 빠졌다.. 하지만

		} else
            System.out.printf("%.1f", (double)a/b);
            }

이렇게 바꾸니 바로 정상적으로 돌아왔다 ^^

문자열이 다른 문자열과 같다고 할때는 .equals 함수를 써야한다.

String c = sc.nextLine();
String a = "+";

-> c.equals(a);

이렇게 써야한다!

문자열을 공백 또는 다른 것을 기준으로 나눌 때는 '문자열.split()' 을 사용하여 배열로 만들어 버리자.

String a = sc.nextLine();
String[] blank = a.split(" ");

-> c h a r A = ' A ' ; //라면
blank = {'c', 'h', 'a', 'r', 'A', '=', ''', 'A', '''}; //으로 나뉘어진다.

스캐너를 통해 char 형태로 바로 바꿀 수 있는 건 없다. String 형태로 받은 후에 char 형태로 바꿔야 한다.
char 형태로 바꾸는 것은 '문자열.charAt(문자번호);'을 선언해주면 된다.

Scanner sc = new Scanner(System.in);
String a = sc.next();
char b = a.charAt(0);

또는

char b = sc.next().charAt(0);

여기서 charAt(0)에 있는 0의 의미는 인덱스의 넘버이다.
예를 들어, String a="안녕하세요"; 문자열에서 a.charAt(0);을 해주면 '안'만 char 형태로 변환해주는 것이다.

메소드 생성 형식

리턴형 메소드명(매개변수) {
	메소드 정의;
}

Ex)

double f(int x) {
	return 2.5+x;
}

리턴형은 return 'a'일 때 'a'를 그 형식대로 한다는 뜻!

 public E delete(int k) { // k번째 항목 삭제
        if (isEmpty()) throw new NoSuchElementException();
        E item = a[k];
        for (int i = k; i < size; i++)
            a[k] = a[k + 1];
        size--;
        if (size > 0 && size == a.length / 4) {
            resize(a.length / 2);
        }
        return item;
    }

얘는 E가 String이면 item을 String 형식으로, E가 int라면 item을 int 형식으로 리턴한다는 소리!


현재 재수강하면서 까먹었던 기본 개념들이 굉장히 많았습니다. 그럴때마다 블로그를 통해 까먹은 내용을 다시 복습했습니다. 이제 코드를 더 깔끔하고 더 쉬운 방법으로 짤 수 있게 되었습니다.

if문 대신 삼항 연산자를 쓰는 습관!

물론~ if문 쓰는게 좀 더 직관적이지만 삼항 연산자도 있다는 것 잊지 말기!

int c = a > b ? 1 : 0; // a가 b보다 크면 c는 1, 아니면 0이라는 뜻

또, 삼항 연산자는 저 1, 0처럼 상수, 수, n+1 형태 가능!!

for (초기값; 범위; 증감)에서 '증감'부분은 '값이 변화'하는 것을 '직접적'으로 드러내야 한다

ex)

for (int i=0; i<10; i+2) // 이렇게 i의 값이 변하지 않으면 안됨!!!
for (int i=0; i<10; i=i+2) // 이런식으로 i의 값이 직접적으로 변해야 됨

while문은 큰 -> 작이 되게끔 코드를 짜주기.....?? while문 안에 있는 조건이 크게 중요하지 않을 때 있음

class Solution {
    public int solution(int n) {
        int answer = 0;

        while(n>0){
            if(n%2==0) answer+=n;
            n--;
        }
        return answer;
    }
}

이런식으로...! 뭔가를 빼주면서.....?하는 느낌으로..!!

num = num++;은 ++ 안됨!

ex) num = 0이라고 가정하면 num = 0 상태로 바로 넘어가기 때문에 안됨. 차라리 num+=1;을 써라! 아니면 ++num;으로 전위연산자를 사용하기

length는 배열의 길이, length()는 문자열의 길이를 구할 때 사용! 둘 다 int 타입이다.

class Solution {
    public int[] solution(String[] strlist) {
        int len = strlist.length;
        int[] answer = new int[len];
        for (int i=0; i<len; i++) {
            answer[i] = strlist[i].length();
        }
        return answer;
    }
}

strlist의 배열 길이를 구하려면 length, strlist 원소의 문자 길이를 구하려면 length()!!!

int[] array = new int[5]
새로운 배열을 선언하는 형태(?), 5가 배열의 길이다.

문자열 안에 특정 문자열이 들어가는지 검사하려면 contains 함수를 사용하면 된다.

ex) str.contains("he");

제곱근 함수
Math.pow(a, 2)는 a의 제곱을 나타냄!
Math.sqrt(double a) ==> a의 제곱근

ex) a = Math.pow(12, 2)를 하면 a에는 144가 담김
double a = 16; System.out.println(Math.sqrt(a));를 하면 4가 출력됨.

0개의 댓글