Java 프로그래밍기초 230214 #2 Flowchart/조건문/반복문/배열/String/Arrays

김춘복·2023년 2월 13일
0

Java 공부

목록 보기
5/20

Flowchart

  • 순서도, 흐름도. 어떤 일을 처리하는 과정을 순서대로 간단한 기호와 도형으로 도식화한 것.


조건문

if

if (조건식) {
	조건식이 참일때 실행되는 문장;
}

if-else

if (조건식) {
	조건식이 참일때 실행되는 문장;
} else {
	조건식이 거짓일때 실행되는 문장;
}

if-elseif-else

if (조건식1) {
	조건식1이 참일때 실행되는 문장;
} else if (조건식2) {
	조건식1이 거짓이고 조건식 2가 참 일때 실행되는 문장;
} else {
	조건식이 거짓일때 실행되는 문장(위의 어느 조건도 참이 아닐때);
}
  • else if는 여러번 사용가능. 마지막 else는 생략 가능

중첩 if

if (조건식1) {
	조건식1이 참일때 실행되는 문장;
    if (조건식 2) {
    	조건식1과 조건식2가 모두 참일때 실행되는 문장;
        } else {
        조건식1이 참이고 조건식2가 거짓일때 실행되는 문장;
        }
} else {
	조건식 1이 거짓일때 실행되는 문장;
}

블럭 {}

  • 여러 문장을 하나로 묶어주는 것.

  • if에서 실행할 문장이 하나라면 if (조건식) 명령문; 이렇게 {}가 생략가능.

switch 조건문

switch (조건식) {
	case1:
    	조건식의 결과가 값1과 같을때 실행되는 문장;
        break;
    case2:
    	조건식의 결과가 값2와 같을때 실행되는 문장;
        break;
     ...
     
     default:
     	조건식의 결과와 일치하는 case 값이 없을 때 실행되는 문장;
  }
  • switch는 시작할 지점을 찾겠다는 개념으로 이해해야!!!!
    break이 없다면 해당 case 밑으로 쭉 다 실행!!

  • 처리하는 경우의 수가 많을 때 유용. default는 생략가능.

  • break;을 안쓰면 switch문 끝까지 실행. break;을 만나면 switch문 전체를 빠져나감.

  • if는 조건식 결과가 t/f일때, switch는 조건식 결과가 정수나 문자열.

  • switch문 조건식의 결과는 정수 of 문자열이어야 한다.

  • case문의 값은 정수, 상수, 문자열만 가능하고 중복되면 안된다. (변수나 실수 불가능!!)



반복문

for

for (초기화; 조건식; 증감식) {
	조건식의 결과가 참인동안 반복적으로 실행되는 문장;
}
  • 실행순서
    : 1)초기화, 2)조건식, 3)조건식 참일경우 문장 수행, 4)증감식, 5) 조건식 거짓될 때까지 반복

중첩 for

for (초기화; 조건식1; 증감식) {
	조건식1이 참인동안 반복적으로 실행되는 문장;
    for (초기화; 조건식2; 증감식) {
    	조건식2가 참인동안 반복적으로 실행되는 문장;
        }
}

향상된 for

for (타입 변수이름 : 배열or컬렉션) {
	배열or컬렉션의 길이만큼 반복적으로 실행하고자 하는 문장;
}

임의의 정수 만들기

  • Math.random() : 0.0 <= x < 1.0사이의 임의의 double 값 반환.

  • 1~10 사이 난수 20개 출력 + -5~5 사이 난수 20개 출력

for (int i = 0; i < 20; i++) {
//	System.out.println(Math.ranmdom()*10)			// 0 <= x < 10.0
//  System.out.println(Math.random()*10+1)			// 1 <= x < 11.0
	System.out.println((int)(Math.random()*10+1))	// 1 <= x < 11 (1,2,3,..,10)
}

for (int i = 0; i < 20; i++) {
	System.out.println((int)(Math.random()*11))			// 0 <= x < 11
    System.out.println((int)(Math.random()*11)-5)		// -5 <= x < 6 (-5,-4,..5)
}
  • 정수 출력하려면 (int) 씌우고, 10한뒤 1더하는거랑 11 하는거랑 1부터인지 0부터인지 범위 다름.

While

while (조건식) {
	조건식의 결과가 참인동안 반복적으로 실행되는 문장;
}
  • 순서 : 1)조건식 2) 조건식이 참인경우 문장수행 3) 조건식이 거짓이 될 때 까지 반복

  • 0부터 정수들 합이 <= 100이 될때 까지 더하는 반복문

int sum = 0;
int i = 0;
while (sum <=100) {
	System.out.println("i = " + i);
    System.out.println("sum = " + sum);
    sum += ++i			// i가 1씩 늘어나면서 sum에게 합을 저장함.
}

do-while

do {
	조건식의 결과가 참인동안 반복적으로 실행하고자 하는 문장;
} while (조건식);
  • 순서 : 1)처음에 무조건 do문장 실행 2)조건식 3)조건식이 참일경우 문장 수행 4)거짓될때까지 반복

break과 continue

  • break : 자신이 포함된 하나의 반복문을 벗어난다. 반복문 자체를 끝내버림

  • continue : 자신이 포함된 반복문의 끝으로 이동한다. 뒷문장들 실행 안하고 다음 반복으로 넘어감
    특정 조건시 반복 건너 뛸 때 유용.

  • 반복문에 이름을 붙여서 break 반복문이름; 으로 활용할 수도 있다.
    ex) allloop: for (int i = 0; i <10; i++){if (i == 5){break allloop;}}


***

배열

  • 배열 : 같은 타입의 여러변수를 하나의 묶음으로 다루는 것.

  • 선언 : 타입[] 변수이름; 이나 타입 변수이름[];

  • 배열생성 : 타입[] 변수이름 = new 타입[길이];
    참조 변수와 배열이 연결되고 참조변수를 이용해 배열을 다룬다.

  • 인덱스 : 각 요소(저장공간)에 자동으로 붙는 일련번호!
    범위 : 가장 왼쪽 0 ~ 가장 오른쪽 '배열길이 -1' 까지

  • 배열의 길이 : 배열이름.length. 배열은 한번 생성되면 그 길이를 바꿀 수 없다!!
    배열을 생성하면 연속적인 메모리 공간을 찾아 주소를 배정하기 때문에 크기를 바꿀 수 없다.
    배열 크기가 부족하면 새로 배열을 만들어 기존 배열 값을 복사해 넣는다.

  • 배열의 초기화 : 배열의 각 요소에 처음으로 값을 저장하는 것
    기본적으로는 타입의 기본값으로 자동으로 초기화.(boolean은 false, 정수는 0, 참조형은 null)
    선언과 동시에 초기화 방법 타입[] 변수이름 = {1, 2, 3, ...}
    초기화 방법

int[] num = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] num2 = {1, 2, 3, 4, 5, 6};			//선언과 초기화 동시에 하면 new int[] 생략가능!!!
int[] num3; // 먼저 선언하고 초기화를 따로하면
// num3 = {1, 2, 3, 4};  // <<이렇게 생략 불가능!!
num3 = new int[]{1, 2, 3, 4} // << 초기화만 할꺼면 new int[] 반드시 붙여야
  • 배열의 출력 : 그냥 배열 변수명을 출력하면 이상한 값이 출력.(char배열 제외)
    for (int i = 0; i < arr.length; i++) {
    system.out.println(arr[i]); } 이렇게 반복문으로 출력하거나
    Arrays.toString(배열이름) 을 써서 메서드로 출력.
    Arrays.deepToSting(이차원배열이름) 을 쓰면 2차원 배열도 출력 가능

  • 배열의 총합과 평균 : sum 변수 만들고 반복문으로 배열값 sum += 배열이름[i]로 합하기.
    평균은 sum값 구하고 나서 .length(배열길이)로 나누기.

  • 배열의 최대 최소값 : min max 변수를 배열의 첫 값으로 초기화 하고 반복문으로 배열 값 하나씩 비교해서 변수에 저장.

String 배열

  • String 클래스 : 기본형처럼 사용 가능한 참조형. 내용 변경할 수 없고 대신 새로운게 생성.

  • String 클래스의 주요 메서드
    char charAt(int index) : 문자열에서 해당 위치(index)에 있는 문자를 반환.
    int length() : 문자열의 길이 반환
    String substring(int from, int to) : 문자열에서 범위의 문자열 반환(from <= x < to)
    bollean equals(Object obj) : 문자열 내용이 같으면 true, 다르면 false
    char[] toCharArray() : 문자열을 char 배열[]로 반환.

String str = "ABCDEFG";
char ch = str.charAt(3); // ch에 D(str에서 index 3인 값) 삽입.
String str2 = str.substring(1,4); // str2 = bcd   index1~4값 문자열로 반환
String str3 = str.substring(1); // str3 = bcdefg  index1부터 끝까지 값 문자열로 반환
char[] chArr = str.toCharArray(); // chArr = {A, B, C, D, E, F, G}
String s2 = new String(chArr); // s2 = "ABCDEFG" char array를 문자열로 다시 합치기
  • String 배열 : String[] name = new String[3];
    3개의 문자열 담을 수 있는 배열 생성. 참조형이기때문에 기본 값은 null.

2차원 배열

  • 테이블 형태의 데이터를 저장하기 위한 배열. 엑셀처럼 가로세로 표.

  • 2차원 배열의 선언과 생성
    : int[][] score = new int[4][3] 4행 3열 2차원 배열 score 생성
    score[0][0] = 88; 1행 1열에 88을 저장

  • 2차원 배열의 초기화
    : int[][] score = new int[][]{{}, {}, {}, {}}; 로 하던가
    int[][] score = {{}, {}, {}, {}}; 로 new int[][]

Arrays (문자열배열 비교 출력 복사 정렬)

문자열 출력

: 1차원 배열 Arrays.toString(배열이름) / 2차원배열 Arrays.deepToString(이차원배열이름)

문자열 비교

: 1차원 비교 Arrays.equals(Arr1[0], Arr2[0]) = t/f로 결과나옴
: 2차원 비교 Arrays.deepEquals(Arr1, Arr2) = t/f로 결과나옴

배열 복사

int[] arr2 = Arrays.copyOf(배열이름, 길이); 배열이름의 배열을 길이만큼 카피.
범위가 넘어가는 복사는 초기화 값이 들어감
int[] arr3 = Arrays.copyOfRange(배열이름, from, to); from<= x < to 인덱스 값까지 복사

정렬

Arrays.sort(배열이름); 배열이름을 오름차순으로 정렬
Arrays.sort(배열이름, Collections.reverseOrder()); 내림차순으로 정렬
Arrays.sort(배열이름, from, to) from<= index < to 값 까지만 정렬.

profile
꾸준히 성장하기 위해 매일 log를 남깁니다!

0개의 댓글