@21.04.08
JAVA
@for-each문
package 배열;
public class ex01for_each문 {
public static void main(String[] args) {
// 1. 문자열 배열 array -> 운비, 석원, 재웅, 하영, 지수
String[] array = {"운비", "석원", "재웅", "하형", "지수"};
// 같은 자료형만 담을 수 있다.
// 배열의 크기는 >> 5칸 / 인덱스 번호 >> 0~4
// 2. 안에 있는 데이터를 전부 출력
for(int i = 0; i<array.length;i++) {
System.out.println(array[i]);
}
// for문 -> 무한루프
// for-each문 -> 배열을 사용해서 반복하는 방법
for(String i:array) {
System.out.println(i);}}}
for-each문은 Python 언어에서 마치 for(a in LIST)의 구조와 같은걸 말한다.
위 코드에서 2개의 for문 모두 같은 결과를 출력하며, 아래인 2번째 for문의 형태가 for-each문의 구조라 할 수 있다.
@Method
Method?
자바에서 클래스는 멤버(member)로 속성을 표현하는 필드(field)와 기능을 표현하는 메소드(method)를 가집니다.
그중에서 메소드(method)란 어떠한 특정 작업을 수행하기 위한 명령문의 집합이라 할 수 있습니다.
위와 같은 구조로 Method를 만들면 된다. 이때 위에서 static 을 쓰지 않으면
위와 같이 스크립트 파일 명으로 된 Class를 하나의 변수에 담아, 변수에 속한 모듈을 꺼내서 쓰는 식으로 내가 만든 Method를 사용해야 한다.
Static외에도 Private이나.... 뭐 다른건 기억도 안난다. 무튼 그냥 파이썬에서 Def 함수와 같은 기능을 하는 명령어.... 인데.. 파이썬보다 더 복잡하다. 무튼 그런 기능을 함.
%STATIC에 대해서.
Static: static은 오브젝트가 아닌 '클래스'에 귀속되는 것들(변수/메서드/클래스)를 명시하기 위한 키워드이다.
@정렬
%버블정렬
보이는 그림과 같이 값의 크기를 비교하는데 있어 인덱스는 무조건 1씩 증가한다. 즉,- 한 루프(비교)를 돌면 최대값이 최우측에 위치하게 된다.- 위에 의해서 2번째 루프는 비교를 1번 덜 해도 된다.- 매 루프를 반복하면 비교 횟수는 계속 줄어들며 최종적으로는 최좌측의 2개의 값만 1번 비교하는 걸로 정렬은 끝이 난다.
버블 정렬의 개념을 보면 대충 알 수 있겠지만 그렇게 효율적인 알고리즘은 아닌것 같다...
버블 정렬에 대한 코드
package 정렬;
import java.util.Arrays;
public class ex01버블정렬 {
public static void main(String[] args) {
int[] arr = {5, 4, 3, 2, 1};
System.out.println(Arrays.toString(arr));
int temp = arr[0];
for(int i=1; i<arr.length;i++) {
System.out.println("========구분======");
for(int j=0;j<arr.length-i;j++) {
if(arr[j]>arr[j+1]) {
temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;}
System.out.println(Arrays.toString(arr));}}
System.out.println("=========구분==========");
System.out.println(Arrays.toString(arr));}}
한 루프마다 무조건 n번째와 n+1번째의 값을 비교하는 식으로 진행되기 때문에 temp라는 int형 변수를 지정, 이를 통해 값을 매번 비교하여 값을 변경해주었다.
%선택정렬
- 선택 정렬은 배열의 최소값을 검색하여 배열의 왼쪽부터 순차적으로 정렬을 반복하는 정렬 알고리즘이다.
- 배열이 미정렬 상태이므로 최소값 검색에는 이진 검색이 아닌 선형 검색 알고리즘을 사용한다.
대충 정리하면 버블정렬이 우측부터 정렬해나갔다면 선택정렬은 좌측에 최솟값을 쌓는 정렬이다.
선택정렬에 대한 코드
package 정렬;
import java.util.Arrays;
public class ex02선택정렬 {
public static void main(String[] args) {
int[] arr = {79, 46, 57, 13, 35};
for(int i = 0;i<arr.length-1;i++) {
int min_I =i;
for(int j=i+1;j<arr.length;j++) {
System.out.println(i+" "+j);
if(arr[j]<arr[min_I]) {
min_I=j;}
System.out.println(Arrays.toString(arr));}
int cnt=arr[min_I];
arr[min_I]=arr[i];
arr[i]=cnt;}
System.out.println(Arrays.toString(arr));}}
한개의 루프를 돌때마다 좌측에 최솟값을 쌓는 것.
하나의 루프가 돌기전에 값 변경은 단 한번만 일어난다.
때문에 최솟값인 인덱스를 지속해서 저장해나간다.
- 반복문 i는 결국 배열의 가장 좌측의 인덱스를 나타낸다.- min_I라는 변수에 i 의 값을 계속해서 저장해준다. (최솟값이 될 인덱스)- 저장된 i라는 인덱스가 가장 작은 값이라면 변동없이 해당위치에 해당 값이 존재할 것.- 아니라면 반복문 변수 j가 하나씩 증가하면서 배열의 min_I번째 인덱스와 값을 비교해나간다.- min_I 인덱스보다 j번 인덱스의 값이 더 작다면 min_I번 인덱스를 j값으로 바꿔준다.- 위에 의해서 가장 좌측이 될 인덱스( i )의 값은 최솟값으로 변경될 것.
이클립스 스캔
'국비교육기관 > 수업' 카테고리의 다른 글
22일차_자바_OOP (0) | 2021.04.13 |
---|---|
20일차_자바_재귀함수_Method-Overloading (0) | 2021.04.09 |
18일차_자바_2차원 배열 (0) | 2021.04.07 |
17일차_자바기초_이중for문 / 웹크롤링 Test (0) | 2021.04.06 |
16일차_자바기초_배열이란 / 웹크롤링_Gmarket_이미지크롤링 (0) | 2021.04.05 |
댓글