[Java] 01. 기본 문법 및 응용(반복문, 배열)


1. 반복문

for문

  • for(변수 초기화; 반복 조건; 증감식){실행문}
    • 실행 순서 : 1.변수 초기화 -> 2. 반복 조건 체크 -> 3. (반복 조건 true) 실행문 (break 있으면 바로 종료) -> 4. 증감식
//1부터 10까지 더하기 (for문)
int sum = 0;

for(int i=0; i<=10; i++){
  sum+=i;
}
// 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10

//주사위를 100번 던진 결과의 합과 평균값 출력 (for문)
int sum = 0;
int cnt = 100;
double avg = 0;

Random rand = new Random();
for(int i=0; i<cnt; i++){
  sum += rand.nextInt(6) + 1;
}
avg = 1.0*sum/cnt; //sum이 int형이므로 1.0을 곱해서 실수로 형 변환
System.out.printf("sum: %d, avg: %f%n", sum, avg); //%d : 정수, %f : 실수, %n : 개행문자

while문

  • while(반복조건){실행문, 증감식}
    • 실행 순서 : 1. 반복 조건 체크 -> 2. 실행문 -> 3. 증감식 (break 있으면 바로 종료) -> 4. 1번부터 다시 반복
//1부터 10까지 더하기 (while문)
int sum = 0;
int i = 0;

while(i<=10){
  sum+=i;
  i++;
}
//0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10

//주사위를 100번 던진 결과의 합과 평균값 출력 (while문)
int sum = 0;
int cnt = 100;
double avg = 0;
int i = 0;

Random rand = new Random();
while(i<cnt){
  sum+= rand.nextInt(6) + 1;
  i++;
}
avg = 1.0*sum/cnt; //sum이 int형이므로 1.0을 곱해서 실수로 형 변환
System.out.printf("sum: %d, avg: %f%n", sum, avg); //%d : 정수, %f : 실수, %n : 개행문자

for vs while

  • for
    - 초기값, 조건식, 증감식의 위치가 명확
    - 반복 회수 예측이 가능한 반복
    - index의 증감 활용
  • while
    - 예측 가변적인 반복
    - index보다는 break, continue 활용
///break, continue 활용                                     //출력
for(int i=1; i<10; i++){                                    1   2   c   4   b
  for(int j=1; j<10; j++){                                  2   4   o   8   r
    if(j==5) break;                                         3   6   n   12  e
    if(j==3) continue;                                      4   8   t   16  a
    System.out.print(i*j +"\t");                            5   10  i   20  k
  }                                                         6   12  n   24
    System.out.println();                                   7   14  u   28
}                                                           8   16  e   32
                                                            9   18      36

//outer 활용
outer: for(int i=1; i<10; i++){                             //출력
        for(int j=1; j<10; j++){                            1 2 2 4 3 6 4 8 5 10 6 12 7 14 8 16 9 18
         if(j==5) break outer;
         if(j==3) continue outer;
         System.out.print(i*j +"\t");
       }
         System.out.println();
      }
  • #찍기
for(int i=0; i<5; i++){              for(int i=5; i>0; i--){              for(int i=0; i<5; i++){
  for(int j=0; j<=i j++){             for(int j=0; j<i; j++){               for(int j=0; j<i; j++){
    System.out.print("#");                System.out.print("#");              System.out.print(" ");
  }System.out.println();              }System.out.println();                }
}                                    }                                      for(int j=9-2*i; j>0; j--){
                                                                              System.out.print("#");
                                                                            }
                                                                            System.out.println();
                                                                          }
//출력                                //출력                               //출력
#                                     #####                               #########
##                                    ####                                 #######
###                                   ###                                   #####
####                                  ##                                     ###
#####                                 #                                       #

2. 배열

  • 배열(Array) 사용 이유
    • 동일한 타입의 변수를 여러개 사용하면?
      • 변수의 수 증가
      • 코드의 길이 증가
      • 반복문 적용 불가
      • 변수의 수가 동적으로 결정될 경우, 사용 불가
  • 배열(Array)로 동일 타입 변수 묶어서 사용하기
    • 배열이란?
      • 동일한 타입의 데이터 0개 이상을 하나의 연속된 메모리 공간에서 관리하는 것
      • 요소에 접근하는 속도가 매우 빠르다.
      • 한번 생성하면 크기 변경 불가
  • 배열(Array) 만들기 #1
    • 타입 [] 변수명;
    • 타입 변수명[];
      • int[] points;
      • String[] names;
    • 변수의 타입과 저장하는 데이터의 타입?
      • int a => a의 타입? int
      • int [] arr => arr의 타입? int의 배열타입 (Reference형), arr이 저장하는 데이터 타입? int
  • 배열의 생성과 초기화
    • 생성
      • new keyword와 함께 배열의 데이터 타입 및 크기 지정 : new data_type[length]
        • new int[3]; => int 타입의 자료 3개를 저장할수 있는 배열을 메모리에 생성
        • points = new int[3]; 생성된 배열을 points라는 변수에 할당
        • points는 메모리에 있는 배열을 가리키는 reference 타입 변수
    • 초기화
      • 배열을 생성과 동시에 자료형에 대한 default 초기화 진행
자료형 기본값 비고
boolean false  
char ‘\u0000’ 곰백문자
byte, short, int 0  
long 0L  
float 0.0f  
double 0.0  
참조형 변수 null 아무것도 참조하지 않음

배열의 사용

-배열은 index번호를 가지고 각 요소에 접근 가능

  • index 번호는 0부터 시작
  • 배열의 길이 : 배열이름.length로 배열의 크기 조회 가능
int [] points = new int[3];
System.out.printf("배열의 크기: %d%n", points.length); => 3

points[0] = 1;
points[1] = 'A';    //묵시적 형 변환
//points[2] = 1.5;  //double 할당 불가 (배열이 int형이므로)

System.out.printf("0 번째 요소: %d%n", points[0]); // 1
System.out.printf("1 번째 요소: %d%n", points[1]); // 65
System.out.printf("2 번째 요소: %d%n", points[2]); // 0

char[]을 이용해 String “KKH”의 각 문자를 저장하고 출력하는 코드

String str = "KKH";
char[] ch = new char[str.length()]; //배열의 길이는 str의 길이

for(int i=0; i<ch.length; i++){
  ch[i] = str.charAt(i); //문자열에서 문자를 하나씩 가져오기
}

for(int i=0; i<ch.length; i++){
  System.out.print(ch[i]);
}

String “1234567890” 의 자리 별 수를 1차원 배열에 저장하고 배열을 순회해서 합 구하기

String str = "1234567890";
char[] nums = str.toCharArray(); //char 배열로 만들어줌
int sum = 0;
for(int i=0; i<nums.length; i++){
  sum += num[i]-'0'
}
System.out.printf("sum: %d%n", sum);
  • 배열(Array) 만들기 #2
    • 생성과 동시에 할당
      • int [] b = {1,3,5,6,8};
      • int [] c = new int[] {1,3,5,6,8};
    • 선언 후 생성 시 초기화 주의
      • int [] points;
        points = {1,3,5,6,8}; // 컴파일 오류
      • int [] points;
        points = new int[]{1,3,5,6,8}; // 선언할 때는 배열의 크기를 알 수 없을 때

for-each문

  • 가독성이 개선된 반복문으로, 배열 및 Collections에서 사용
  • index 대신 직접 요소(elements)에 접근하는 변수를 제공
  • naturally ready only(copied value)
  • : 사용
  • index를 사용하지 않아서 간편해졌지만 index를 사용 할 경우에는 사용 불가
int intArray[] = {1,3,5,7};                                   for(int i=0; i<intArray.length; i++){}
for(int x : intArray){                                          int x = intArray[i];
  System.out.println(x);                  =                     System.out.println(x);
}                                                             }

//순서 바꾸기 (swap)
int intArray[] = {1,3,5,7};
int temp = intArray[1];
intArray[1] = intArray[2];
intArray[2] = temp;

for(int x : intArray){
  System.out.println(x);
}

Array is Immutable

  • 최초 메모리 할당 이후, 변경할 수 없음
  • 개별 요소는 다른 값으로 변경이 가능하나, 삭제할 수는 없음.
  • 크기를 늘리거나 줄일 수 없음

배열 요소의 각 숫자가 몇번 사용 되었는지 숫자별로 사용 횟수 출력

int arr[] = {3,7,2,5,7,7,9,2,8,1,1,5,3};
int used[] = new int[10];

for(int num:arr){
  used[num]++; //배열 숫자가 used 배열의 index로 활용
}
System.out.println(Arrays.toString(used)); //배열 값 출력
  • 2차원 배열(Array) 만들기 #1
    • int Type 기준으로 4*3 배열 만들기
선언 생성 할당
int [][] arr arr = new int[4][3]; arr[0][2] = 3;
int arr[][]    
int []arr[]    
  • 2차원 배열 만들기 #2
    • int Type 기준으로 4*3 배열과 값을 동시에 만들기
    • {}안에 , 와 {}을 이용해서 선언과 동시에 값을 할당
선언 생성 할당 동시에
int [][] arr = {{0,1,2},{0,1,2},{0,1,2},{0,1,2}}
  • 2차원 배열 만들기 #3
    • int Type 기준으로 4*? 배열 만들기
    • 1차 배열만 생성 후, 필요에 따라 2차 배열을 생성함
1,2차 선언 / 1차 생성
int [][] arr = new int[4][]
2차 생성
arr[1] = new int[2];
arr[0] = new int[4];
arr[2] = {1,2,3}; X

etc. ★배열 탐색★

X로 표시된 항목의 상하좌우 숫자의 합을 구하는 코드

       
2 3 1 4
1 X 3 2
3 4 X X
X 4 1 5
int deltas[][] = { {-1,0},{1,0},{0,-1},{0,1}}

int sum = 0;
for(int r = 0; r<4; r++)
  for(int c=0; c<4; c++)
    if(arr[r][c] == 'X'){
      for(int d=0; d<4; d++){
        int nr = r + deltas[d][0];
        int nc = c + deltas[d][1];
        if(nr>=0 && nr<4 && nc>=0 && nc<4 && arr[nr][nc] != 'X'){
          sum += arr[nr][nc] - '0';
          arr[nr][nc] = '0';
        }
      }
    }
System.out.println(sum);

태그:

카테고리:

업데이트:

댓글남기기