4/25 java.lang, java.util

박세현·2024년 4월 25일

JAVA

목록 보기
13/22
post-thumbnail

유용한 클래스

1. java.lang.Math 클래스

  • 수학관련 편의기능 클래스
  • 모두 정적 메서드로 구성
  • final클래스이다

참고) 자바문서_Math
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Math.html



1) abs(..) : 절대값

ex) -10 -> abs(-10) -> 10


2) ceil(..) : 올림


3) floor(..) : 버림


4) round(..) : 반올림


5) pow(.., ..) : 제곱

ex) pow(2,3); -> 2의 3제곱


6) random(..) : 0~1 미만의 무작위 난수

예시)

Math.random() : 0~1 사이 난수

Math.random() * 10 : 0~10 사이 난수

ㄴ int형으로 강제형변환(묵시적형변환)
ㄴ 0~42 사이 정수

ㄴ ceil로 반올림
ㄴ 1~43 사이 정수


7) sqrt(..) : 루트값

ex) sqrt(9) -> 3


8) PI : 원주율


9) min(.., ..)

  • 두 수 비교해서 작은거 반환


예시) 1) ~ 7)

import static java.lang.Math.*; 하면 함수명만 가지고 java.lang.Math에 정의된 메서드 바로 사용 가능
ㄴ import안하면 Math.abs.(-10) 이렇게 작성해야 함



예시) 로또 번호 뽑기

package exam04;

import java.util.Arrays;

// 문제 : 1 ~ 43, 6개의 숫자 - 중복x

public class Ex02 {
    public static void main(String[] args) {
        //int num = (int)Math.ceil(Math.random() * 43); // 1 ~ 43
        //int num = (int)(Math.random() * 43) + 1; // 1 ~ 43
        //System.out.println(num);
        int cnt = 0;
        int[] lotto = new int[6];

        while(cnt < 6){
            int num = getNumber();
            if (chkDuplicated(lotto, num)) {
                continue;
            }
            lotto[cnt] = num;
            cnt++;
        }
        System.out.println(Arrays.toString(lotto));

        //System.out.println(Math.random() * 3);  // 0, 1, 2 // 곱하는 수보다 작은 수가 정수부분에 나온다
    }

    public static int getNumber(){
        return(int)(Math.random() * 43) +1;
    }

    public static boolean chkDuplicated(int[] lotto, int num) {
        for (int n : lotto) {
            if (n == num)
            return true;
        }
        return false;
    }

}
package exam04;

import java.util.HashSet;

// 문제 : 1 ~ 43, 6개의 숫자 - 중복x

public class Ex03 {
    public static void main(String[] args) {
        // Set : 중복x
        HashSet<Integer> lotto = new HashSet<>();
        while(lotto.size() < 6){
            lotto.add(getNumber());
        }
        System.out.println(lotto);

    }

    public static int getNumber() {
        return (int)(Math.random() * 43) + 1; // 1 ~ 43
    }
}



2. java.util.Objects 클래스

  • 객체를 다룰 때 사용하는 편의 기능 모음
  • 모든 메서드가 정적(static)
  • final 클래스이다

참고) 자바문서
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Objects.html



1) equals(.., ..)

  • 두 객체간의 주소 비교


예시) equals(.., ..)

package exam04;

import java.util.Arrays;

//문제 : nums1, num2가 값이 같은지 체크하는 법
public class Ex05 {
    public static void main(String[] args) {
        int [] nums1 = { 10, 20, 30, 40 };
        int [] nums2 = { 10, 20, 30, 40 };

//        2번 풀이
        boolean isSame = Arrays.equals(nums1, nums2);
        System.out.println(isSame);


//        1번 풀이
//        boolean isSame = true;
//        first : for ( int i = 0; i < nums1.length; i++ ) {
//            if (nums1[i] != nums2[i]){
//                isSame = false;
//                break;
//            }
//        }
//        System.out.println(isSame);
    }
}

ㄴ equals내에 1번 풀이가 내재되어 있다



2) deepEquals(.., ..)

  • 중첩된 객체를 재귀적으로 주소 비교

참고) Arrays.equals(..), Arrays.deepEquals(...)


예시) deepEquals(.., ..)

package exam04;

import java.util.Arrays;

//문제 : nums1, num2가 값이 같은지 체크하는 법
public class Ex06 {
    public static void main(String[] args) {
        int [][] nums1 = {{10, 20, 30}, {40, 50, 60}};
        int [][] nums2 = {{10, 20, 30}, {40, 50, 60}};
        boolean isSame = Arrays.deepEquals(nums1, nums2);
        System.out.println(isSame);
    }
}


3) int hash(Object... values)



4) int hash(Object o)



5) boolean isNull(..)

  • 참조 변수가 null인지 체크



6) boolean nonNull(..)

  • 참조 변수가 null이 아닌지 체크



7) ⭐requiredNonNullElse(.., ..)

  • 특정 변수가 null이면 기본값을 부여


예시) requiredNonNullElse(.., ..)

ㄴ 에러남 : NPE(NullPointerException)

ㄴ requiredNonNullElse() : 특정변수(str)이 null이면 기본값("")을 부여
ㄴ 에러안남




3. java.util.Random 클래스

참고)자바문서_java.util.Random
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Random.html



1) nextBoolean()

  • true/false를 번갈아 가면서 무작위로 만들어 주는 난수


2) nextDouble()

  • 0.0 ~ 1.0 사이 무작위 난수

예시) nextInt(), nextBoolean()

ㄴ for문 : nextInt(), nextBoolean()의 출력값이 6개씩 나오도록 돌림
ㄴ nextInt() : 중복되지 않은 Int자료형 난수 출력
ㄴ nextBoolean() : true/false를 번갈아 가면서 무작위로 난수 출력




4. java.util.Scanner 클래스

  • java.io
  • 데이터를 입력 받을 때 사용하는 편의 클래스
  • Scanner 클래스 매개변수에 입력받을 출처를 넣음 -> 어디서 입력할지 정하는 과정
    ex) Scanner sc = new Scanner(System.in); : 터미널에서 입력

    • 터미널에서 입력
      InputStream System.in
      -> 자료형이 InputStream
      -> scanner쪽에 System.in을 매개변수로 넣으면 터미널 쪽에서 입력할 수 있도록 해줌

    • 파일
      File
      FileInputStream..


    • 네트워크


참고) 자바문서_java.util.Scanner
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Scanner.html




1) Scanner에 정의된 생성자 함수들

  • 생성자의 매개변수로 출처 입력 = 매개변수를 통해 어디서 입력할지(터미널, 파일...) scanner가 구분
  • Scanner(File source) : 파일쪽에서 입력
  • Scanner(InputStream source) : 터미널쪽에서 입력


2) hasNext()

  • 읽어올때 커서를 이동하면서 읽어오는데 다음이동할 커서가 있는지 없는지 쳌

ㄴ 매개변수 다양...
ㄴ 특정 자료형에 맞게 읽어 올 수 있단 말



3) Next()

  • 전체를 읽어 올 때 쓰는 메서드

참고) Next...()

  • 읽어 올 때 주로 쓰는 메서드


3-1) NextInt()

  • 정수로 입력받을 때 주로 쓰는 메서드
  • Int값을 하나씩 하나씩 읽어온다


3-2) NextLine()

  • 문자열로 입력받을 때 주로 쓰는 메서드
  • 이걸 실행하면 터미널이 블록킹되어 있음
    -> 커서만 깜빡깜빡... -> 입력 할 때까지 대기상태
    -> 입력하면 그때서야 입력한 값이 변수에 담긴다

예시) 터미널에서 입력하기

String name = sc.nextLine(); 커서 깜빡깜빡... -> 입력 할 때까지 대기상태

ㄴ 커서 깜빡깜빡 하는 곳에 이이름이라고 입력



예시) 파일에서 입력하기

ㄴ data라는 파일 생성

while (sc.hasNextInt()) {} : hasNext가 다음이동할 커서가 있는지 없는지 쳌하고 boolean타입으로 반환값이 나오니까 더이상 읽어 올게 없을 때 false로 뜨면서 while문의 {} 시행멈춤
int num = sc.nextInt(); : sc.nextInt()가 data파일에 있는 Int값을 하나씩 하나씩 읽어오는 걸 int num이라는 변수에 담음

ㄴ 연산도 가능~




5. java.util.StringTokenizer 클래스

  • 구문 문자를 가지고 문자를 분리할때

  • 토큰 : 구문 문자

  • 요즘은 사용빈도가 떨어진다고 함

  • StringTokenizer 클래스 생성자 함수의 매개변수

    • 첫번째 매개변수 : 토큰을 가지고 분리할 문자열
      -> StringTokenizer(String str) : 매개변수가 1개인 생성자함수를 이용하면 nextToken(String delim) 메서드를 통해 토큰을 설정해 줘야 함
    • 두번째 매개변수 : 구문 토큰 = 문자열 분리 = 첫번째 매개변수 분리시키는 토큰
    • 세번째 매개변수 : 구문문자를 포함해서 쪼갤지 말지

참고)자바문서_java.util.StringTokenizer
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/StringTokenizer.html



1) nextToken(String delim)

  • 토큰을 설정
  • StringTokenizer(String str) : 매개변수가 1개인 생성자함수를 이용하면 nextToken(String delim) 메서드를 통해 토큰을 설정해 줘야 함


2) countToken()

  • 구문문자가 몇개가 존재하는지 쳌


3) hasMoreTokens()

  • 다음 이동할 토큰이 있는지 쳌


4) nextTokens()

  • 쪼개진 문자열을 가져올 때 사용

예시) 토큰1개 설정

StringTokenizer st = new StringTokenizer(fruits, "#"); : 토큰이 # 이다
while(st.hasMoreTokens()) {} : st.hasMoreTokens()가 다음 토큰(#)이 있으면 true를 반환값을 내보냄 -> {} 실현
String fruit = st.nextToken(); : 쪼개진 문자열을 가져올 때 사용



예시2) 토큰 여러개 설정




profile
귤귤

0개의 댓글