[JAVA] 반복문, 1차원 배열

SOYEON JEONG·2023년 3월 25일
0
post-thumbnail

단축키 모음

for 입력 후 CTRL + spacebar 두번째for문

int i = 0; 으로 초기화하는 이유

i 는 배열 index의 앞글자, 배열의 가장 앞의 주소값

되도록 반복 횟수 적게 만들기

ex) 예를 들면 짝수 출력할 때 1 부터 100까지면 50 출력

반복문

💡 for문

for(초기식; 조건식; 증감식) {
		실행할 문장;
}

💡 while문

while(조건식) {
      실행할 문장;
}

for문과 while문의 차이

for : 몇 번 반복할 지 알 때
while : 몇 번 반복할 지 모를 때 (특정한 조건만 존재 - 키오스크)

💡 do ~ while문

do {
     실행할 문장;
} while(조건식) {

};

무조건 한 번은 실행되어야 할 때 사용한다.


기타 제어문

break : 즉시 해당 중괄호 영역을 탈출한다.

  • if문 안에서 사용 시 if문을 탈출하지 않고
  • if문을 감싸고 있는 중괄호 영역을 탈출한다.

continue : 즉시 다음 반복

  • 아래의 코드를 실행하지 않기 위해서 사용한다.

switch문에서는 break를 써도 중괄호를 나갈 수 없기 때문에 if문을 사용하거나 boolean flag 초기값 false 사용


배열 - 값이 아니라 저장공간(변수)의 나열

RAM 에는 heap 이라는 영역이 있다. heap은 프로그램이 실행되고 있어도 바꿀 수 있다. 다른 표현으로는 동적 메모리라고 한다. new 연산자new 뒤에 있는 내용을 heap 메모리에 올리라는 의미이다. 눈에는 보이지 않지만 컴파일이 될 때 중괄호 앞에는 new가 생략되어 있다.

  1. 변수를 여러 개 선언하면 이름도 여러 개 생긴다. 이 때 각 저장공간을 관리하기가 불편하다. 따라서 n칸 배열을 한 번만 선언하면 저장공간도 n개 생기고, 이름도 한 개이기 때문에 관리하기 편하다.
  2. 규칙성이 없는 값에 규칙성을 부여하기 위해서
    ex) 문자열 순서대로 출력

배열의 선언

자료형[] 배열명 = {1,2,3,...}; 
// 어떤 값을 넣을지 알 때 사용
자료형[] 배열명 = new 자료명[칸수]; 
// 어떤 값을 넣을지는 모르나, 몇 칸 만들지는 알 때 사용 + 자동 초기화
자료형[] 배열명 = null; 
// 어떤 값을 넣을지도 모르고 몇 칸 만들지도 모를 때 사용한다.

※ new : Heap 메모리에 할당, 초기값으로 자동 초기화
※ null : 주소의 초기값, 어떤 주소를 넣을지 모를 때 작성하는 값
※ 자바에서 배열은 항상 Heap(동적 메모리)에 할당되기 때문에 메모리 상으로는 동적배열만 존재한다.

배열의 구조

int[] arData = {3, 5, 1, 2, 8};

arData라는 이름의 저장공간은 한 개 만들어지며, 여기에는 한 개의 값만 담을 수 있다. 5개의 값을 담기 위해서는 5칸이 필요하며, 이는 Heap 메모리에 할당된다. 5칸의 저장공간 중 첫 번째 저장공간의 주소값이 arData 저장공간으로 들어가며, 다음 주소에 접근하기 위해서는 +n을 한다.

예를 들어 arData + 2는 1이라는 값이 담긴 주소값이 되며, *(arData + 2)는 해당 주소에 가서 읽어온 1이라는 값이 된다. JAVA에서는 직접 주소에 접근하는 연산자가 없기 때문에 위와 같은 식을 []로 치환하여 사용하며, arData[2]로 사용한다.

각각의 방 번호는 index라고 부르며, 배열은 시작주소를 가지고 있기 때문에 인덱스 번호는 항상 0부터 시작된다.

length

배열을 선언하면 length라는 상수가 선언되고, 해당 배열의 길이가 담긴다.
배열명.length로 사용하게 된다.

배열의 사용

int [] arData = new int[5]; // 저장공간
arData[0] = 10; // 저장공간
arData[0] + 9; // 값
System.out.println(arData); //주소값
arData[2] = arData[0] + arData[1]; // 저장공간, 값
System.out.println(arData[5]); // 오류

실습코드

package stringTest;

public class StringTest {
	public static void main(String[] args) {
		String data = "ABCD";
		System.out.println(data.length());
		System.out.println(data.charAt(1));
		System.out.println(data.indexOf("D"));
	}
}
package stringTest;

import java.util.Iterator;
import java.util.Scanner;

public class StringTask {
	public static void main(String[] args) {
//      정수를 한글로 변경
//      입력 예) 1024
//      출력 예) 일공이사
      
//      1. 정수로 입력받기
      Scanner sc = new Scanner(System.in);
      String message = "정수 입력: ";
      String hangle = "공일이삼사오육칠팔구";
//      int number = 0;
      String number = null;
      String result = "";
      
      System.out.print(message);
//      number = sc.nextInt();
//      
//      while(number != 0) {
//         result = hangle.charAt(number % 10) + result;
////         result = result + hangle.charAt(number % 10);
//         number /= 10;
//      }
//      System.out.println(result);
      
//      2. 문자열로 입력받기
      number = sc.next();
      for (int i = 0; i < number.length(); i++) {
         result += hangle.charAt(number.charAt(i) - 48);
      }
      System.out.println(result);

	}
}
profile
인프런에 취업하고 싶어!

0개의 댓글