수업

+7 배열, 크롤링

hs_developer 2022. 5. 11. 16:12

변수/상수 = 데이터 1개 저장

배열 = 같은 데이터 여러 개 모아서 관리

클래스 = 다른 데이터 여러 개 보아서 관리

 

 

기능

 

비교

*equals

문자열이 같은 지 확인 → 결과 값 (boolean)

e.g 로그인, 아이디 중복 체크

 

equalsIgnoreCase

문자열이 같은지 확인

 

equals, equalsIgnoreCase 차이 → 대소문자 구분

 

contains: 포함 문자열 (챗봇)

eg 검색기

 

startsWith: 시작 문자열

endsWith: 끝 문자열

eg 제안 기능(자동 완성)

 

compare: 문자열의 크기 비교

 

 

추가

insert: 추가 → 사용 빈도 없음

concat: 대체(+)

 

찾기

*indexOf(): 앞에서 찾기

*lastIndexOf(): 뒤에서 찾기

 

 

문제 제어

*split: 문자를 잘라서 배열에 저장

*substring(): 문자열을 자른 경우 → 문자가 길 경우 ...로 자름

 

변환

toUpperCase: 대문자

toLowerCase: 소문자

*valueOf(): 모든 데이터형을 문자열로 변환

 

제거

trim(): 좌우 공백 제거 → 사용자 입력

 

 

p182

 

배열

같은 타입의 여러 변수를 하나로 묶어서 관리

 

배열 선언

1. 데이터형 배열명[];

2. 데이터형[] 배열명; → 권장

 

배열 초기화

1. 선언과 동시에 초기화

int[] arr = {1, 2, 3, 4, 5};

 

2. 선언과 동시에 default 선언

int[] arr = new int[5]; → 0으로 초기화

 

배열 안에 있는 데이터 출력

 

 

 

배열 값 변경

 

메모리 구조

 

 

 

public static void main(String[] args) {
		
    int a=(int)(Math.random()*100)+1; // 1-100
    int b=(int)(Math.random()*100)+1;
    int c=(int)(Math.random()*100)+1;
    int d=(int)(Math.random()*100)+1;
    int e=(int)(Math.random()*100)+1;

    System.out.println(a + " " + b + " " + c + " " + d + " " + e);

    // 최대값
    int max=0;
    int min=100;

    if(max<a)
        max=a;
    if(max<b)
        max=b;
    if(max<c)
        max=c;
    if(max<d)
        max=d;
    if(max<e)
        max=e;
    System.out.println("최대 값: " + max);

    // 최소값
    if(min>a)
        min=a;
    if(min>b)
        min=b;
    if(min>c)
        min=c;
    if(min>d)
        min=d;
    if(min>e)
        min=e;
    System.out.println("최소 값: " + min);

		
	}

변수를 일일히 다 입력해야 하는 불편

 

48 55 25 41 41
최대 값: 55
최소 값: 25

 

↓ 배열로 간단히

 

 

public static void main(String[] args) {
	
    int[] arr = {
            (int)(Math.random()*100)+1,
            (int)(Math.random()*100)+1,
            (int)(Math.random()*100)+1,
            (int)(Math.random()*100)+1,
            (int)(Math.random()*100)+1,
    };

    int max=0;
    int min=100;

    System.out.println(Arrays.toString(arr));
    // 배열에 저장된 값 출력할 때 사용
    // 배열에 저장된 개수 → length
    // index 번호 0번부터 시작 → 개수보다 index 번호 작음
    // index 번호 벗어나면 오류 발생

    for(int i=0; i<arr.length; i++)
    {
        if(max<arr[i])
            max=arr[i];

        if(min>arr[i])
            min=arr[i];	
    }

    System.out.println("최대 값: " + max);
    System.out.println("최소 값: " + min);

}

 

[29, 83, 97, 29, 82]
최대 값: 97
최소 값: 29

 

 

 

int[] arr = {
        (int)(Math.random()*100)+1,
        (int)(Math.random()*100)+1,
        (int)(Math.random()*100)+1,
        (int)(Math.random()*100)+1,
        (int)(Math.random()*100)+1,
};


↓ 간단하게


int[] arr = new int[5];
for(int i=0; i<arr.length; i++)
{
    arr[i]=(int)(Math.random()*100)+1;
}

 

 

 

크롤링 라이브러리 사이트

https://mvnrepository.com/

 

Maven Repository: Search/Browse/Explore

Alchemist Machinery to load from files Last Release on May 9, 2022

mvnrepository.com

 

Jsoup으로 검색

 

 

 

크롤링 연습 사이트

https://try.jsoup.org/

 

Try jsoup online: Java HTML parser and CSS/Xpath debugger

 

try.jsoup.org

 

 

public static void main(String[] args) {
	
		
		// 문자열 배열
		String[] names = {"김가가","이나나","박다다","한라라","강바바"};

							
		// 출력
		for(String name:names)
		{
			System.out.println(name);
		}
		
		char[] alpha= {'A','B','C','D','E'};
		for(int i:alpha)
		{
			System.out.println(i);
				
		}
		
	}

 

김가가
이나나
박다다
한라라
강바바
65
66
67
68
69

 

 

 

오늘 배열 범위 p182-287

 

 

같은 종류

 

eg. 3명의 국어, 영어, 수학

int kor1, kor2, ko3;
int eng1, eng2, eng3;
int math1, math2, math3;

 

int[] score = new int[9]; → 관리하기 어렵다

 

int[] kor = new int[3];
int[] eng = new int[3];
int[] math = new int[3];

 

class Student
{
    int kor, eng, math;
}

new 이용하면 메모리 여러 개에 저장 가능

 

 

선언 방식

데이터형[] 배열명; → 권장

데이터형 배열명[];

 

초기 값 주는 방식

데이터형[] 배열명={값, 값...};

데이터형[] 배열명=new 데이터형[5];

 

 

int[] arr;

arr = new int[5]

 

new 사용했을 시 default 자동 초기화

int = 0
long = 0L
double = 0.0
String = null
boolean = false

 

 


정수 10개 저장하고 초기 값(1-100 → random()) → 출력

 

public static void main(String[] args) {

    int[] arr = new int[10]; // 10개 출력

    // 0으로 초기화
    for(int i=0; i<arr.length; i++)
    {
        arr[i]=(int)(Math.random()*100)+1; 
    }

    // 출력
    System.out.println(Arrays.toString(arr));


}

 

[94, 52, 37, 14, 14, 28, 28, 58, 39, 97]
// 랜덤 숫자 10개 출력

 

 

 

성적 10개 받아서 총합, 평균 구하기

 

[57, 79, 85, 88, 69, 1, 85, 1, 7, 23]
총합: 495
평균: 49.50
최대 값: 88
최소 값: 1

 

public static void main(String[] args) {
	
        int[] arr = new int[10];

        // 초기 값
        for(int i=0; i<arr.length; i++)
        {
            arr[i]=(int)(Math.random()*100)+1;
        }

        // 출력
        System.out.println(Arrays.toString(arr));

        // 총합 / 평균
        int total=0;
        double avg=0.0;

        // 총합
        for(int i:arr)
        {
            total+=i;
        }

        // 평균
        avg = total/10.0;


        // 최대값 / 최소값
        int max=arr[0];
        int min=arr[0];

        for(int i:arr)
        {
            if(max<i)
                max=i;
            if(min>i)
                min=i;
        }

        System.out.println("총합: " + total);
        System.out.printf("평균: %.2f\n", avg);
        System.out.println("최대 값: " + max);
        System.out.println("최소 값: " + min);
    }

 

 

검색 기능

 

검색어 입력: 
자
자몽
자두

 

public static void main(String[] args) {
	
    String[] kor = {

            "귤",
            "망고",
            "수박",
            "사과",
            "배",
            "복숭아",
            "백도",
            "자몽",
            "포도",
            "청포도",
            "딸기",
            "산딸기",
            "블랙베리",
            "블루베리",
            "키위",
            "멜론",
            "오렌지",
            "레몬",
            "멜론",
            "바나나",
            "자두",
            "살구",
            "파인애플",
            "감",
            "코코넛",
    };

    Scanner sc = new Scanner(System.in);

    System.out.println("검색어 입력: ");
    String ss = sc.next();

    for(String f:kor)
    {
        if(f.contains(ss)) // 검색 기능
        {
            System.out.println(f);		
            try // 천천히 나오는 효과
            {
                Thread.sleep(200);
            }catch(Exception x) {}
        }
    }

 

 


 

예제

 

 

1. 5개 정수 입력 받고 차례로 출력하는 프로그램 만들기

 

입력 예) 5 10 9 3 2

출력 예) 5 10 9 3 2

 

 

[3, 2, 4, 5, 5]

 

public static void main(String[] args) {
		
    int[] arr = new int[5];

    for(int i=0; i<arr.length; i++)
    {
        arr[i]=(int)(Math.random()*5)+1;
    }

    System.out.println(Arrays.toString(arr));

}

 

 

2. 문자 10개 저장할 수 있는 배열 선언하고 10개의 문자를 입력 받아 입력 받은 문자를 이어서 출력하는 프로그램 

 

[A, X, I, L, K, M, U, E, J, D]

 

public static void main(String[] args) {

    char[] arr = new char[10];

    for(int i=0; i<arr.length; i++)
    {
        arr[i]=(char)((int)(Math.random()*26)+65);
    }

    System.out.println(Arrays.toString(arr));

}

 

// 다른 방법
public static void main(String[] args) {

    char[] arr = new char[10];

    for(int i=0; i<arr.length; i++)
    {
        arr[i]=(char)((int)(Math.random()*26)+65);
    }

    for(char c:arr)
    {
        System.out.print(c + " ");
    }

}

 

 

 

 

3. 정수 10개 입력 받은 후 3, 5번째 정수, 마지막으로 입력 받은 정수를 차례로 출력하는 프로그램

 

[33, 70, 91, 25, 90, 63, 82, 79, 47, 52]
세번째 값: 91
다섯번째 값: 90
마지막 값: 52

 

public static void main(String[] args) {
		
    int[] arr = new int[10];

    for(int i=0; i<arr.length; i++)
    {
        arr[i]=(int)(Math.random()*100)+1;
    }

    System.out.println(Arrays.toString(arr));
    System.out.println("세번째 값: " + arr[2]);
    System.out.println("다섯번째 값: " + arr[4]);
    System.out.println("마지막 값: " + arr[arr.length-1]);

}

 

 

 

 

4. 10개의 정수 입력 받아 그 중 가장 큰 수 출력하는 프로그램

 

[26, 77, 29, 8, 57, 45, 32, 86, 92, 92]
최대 값: 92

 

public static void main(String[] args) {
		
    int[] arr = new int[10];

    for(int i=0; i<arr.length; i++)
    {
        arr[i]=(int)(Math.random()*100)+1;
    }

    System.out.println(Arrays.toString(arr));


    int max=0; // 최대값 저장 변수

    for(int i:arr)
    {
        if(max<i)
            max=i;
    }

    System.out.println("최대 값: " + max);
}

 

 

 

5. 10명의 컴퓨터 정수 입력 받아 배열에 저장하고 총점과 평균 구하여 출력하는 프로그램

 

[64, 21, 55, 55, 6, 11, 76, 14, 48, 63]
총합: 413
평균: 41.30

 

public static void main(String[] args) {

        int[] arr = new int[10];

        for(int i=0; i<arr.length; i++)
        {
            arr[i]=(int)(Math.random()*100)+1;
        }

        System.out.println(Arrays.toString(arr));


        int total=0;
        double avg=0.0;

        // 총점
        for(int i:arr)
        {
            total+=i;
        }

        // 평균
        avg = total/10.0;

        System.out.println("총합: " + total);
        System.out.printf("평균: %.2f\n", avg);

    }

 

 

6. 5개의 정수를 {95, 75, 85, 100, 50}으로 초기화하고 오름차순으로 정렬하는 프로그램

 

정렬 전: 
[95, 75, 85, 100, 50]
[50, 75, 85, 95, 100]

 

public static void main(String[] args) {
		
    int[] arr = {95, 75, 85, 100, 50};

    // 정렬 전
    System.out.println("정렬 전: ");
    System.out.println(Arrays.toString(arr));

   for(int i=0; i<arr.length-1; i++)
    {
        for(int j=i+1; j<arr.length; j++)
        {
            if(arr[i]>arr[j]) // < 이면 내림차순
            {
                int temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
            }
        }
    }
    System.out.println(Arrays.toString(arr));
}

 

    // 오름차순
    Arrays.sort(arr);
    System.out.println(Arrays.toString(arr));

    // 오름차순
    for(int i=0; i<arr.length; i++)
    {
        System.out.print(arr[i] + " ");
    }
    System.out.println();

 

// 내림차순
for(int i=arr.length-1; i>=0; i--)
{
    System.out.print(arr[i]+ " ");
}