Kotlin 문법 종합반 #2下. 조건식과 반복문

·2024년 6월 8일
0

2-7. 조건식

if 구조

if (조건식A) {
	aaa
} else if (조건식B) {
	bbb
} else {
	ccc
}

조건식A가 참이면 aaa를 실행
조건식B가 참이면 bbb를 실행
둘다 거짓이면 ccc를 실행

when 구조

when (변수) {
	A -> {
    	aaa
    }
    B -> {
    	bbb
    }
}

변수가
A면 aaa를 실행
B면 bbb를 실행


2-8. 반복문

for 문

for (변수 in 목록) {
	aaa
}

목록을 변수에 하나씩 대입하며 코드를 반복해 실행합니다
목록의 범위는 아래와 같이 쓸 수 있습니다

for (i in 1 until 3) {
	println(" ${i}번째 반복 ")
}
  • for (i in A until B)
    A이상, B미만의 반복
for (i in 1 .. 3) {
	println(" ${i}번째 반복 ")
}
  • for (i in A .. B)
    A이상, B이하의 반복
var array = arrayOf("A", "B", "C")
for (i in array) {
	println(" 목록에 ${i}를 확인했어 ")
}
  • arrayOf()
    배열을 만듭니다

  • for (i in 배열)
    배열을 순서대로 반복해 실행합니다


while문

while(조건식){
}

조건식이 참이면 코드를 무한히 반복합니다
무한 루프에 빠지지 않으려면,
코드에 조건식을 거짓으로 만드는 로직을 반드시 포함해야 합니다 (예시 : 변수++ )

while(true){
}

true를 적으면 코드를 무한히 반복합니다


흐름제어

if / when 조건식과 함께 흐름제어를 사용하면,
조건부로 반복문을 관리할 수 있습니다

break

코드에 break가 등장하면 즉시 반복문을 종료합니다.
주로 if문과 함께, 특정 조건을 만족 시

continue

코드가 continue가 등장하면 즉시 다음 반복문으로 넘어갑니다
뒷부분 코드를 더이상 실행하지 않습니다

< 흐름제어 예시 >

    var animals = arrayOf ("닭", "사람", "소", "곰", "개")
    var satiety:Int = 0

    for (animal in animals){

        println("${animal}를 만났다")

        if (animal == "곰"){
            println("당신은 ${animal}에게 죽었습니다")
            break
        } else if (animal == "사람") {
            println("${animal}는 먹을 수 없어서 포획하지 않았다")
            continue
        }

        println("${animal}를 포획했다. 맛있게 먹었다. (포만감: ${++satiety}) ")
    }

animals 배열을 animal에 하나씩 대입하며 for문을 반복합니다
만난 동물을 포획하면, 포만감이 올라가는 로직입니다

그러나, 사람을 만나면 포만감 로직을 생략합니다
곰을 만나면 반복문이 완전히 종료됩니다


if, when, while 연습

RPG 게임에서 10까지 레벨업한 후,
네가지 직업 중 하나로 1차 전직하는 상황을 조건식/반복문으로 구현해보았습니다


변수를 미리 선언

var name = ""
var jobClass = "초보자"
var level = 1
var action = ""

main() 함수 상단에 미리 변수를 선언했습니다
값을 초기화하기 위해, 빈 따옴표를 두었습니다


fun main() {

    // 캐릭터 생성. realine()값을 name에 대입
    
    println("당신의 이름을 알려주세요")
    name = readLine().toString()
    
    println("${name}님, 반갑습니다! 당신은 ${jobClass}입니다")
    println("[레벨업], [상태창], [1차전직] 중 원하는 행동을 입력하세요")
    

    // while(true)문으로 무한 반복
    while (true) { ***코드 후술*** }
}

캐릭터 생성 시, readLine()을 name에 대입합니다
while(true) 문으로 행동을 무한히 입력할 수 있게 하였습니다

while(true) { } 내부 코드

    
        // readLine() 값을 action에 대입
        action = readLine().toString()
        when (action) {

            "레벨업" -> { println("${name}님, ${++level}이 되신 것을 축하합니다!") }
            // 전위증가연산자로 println과 동시에 level +1 상승

            "상태창" -> { println("${name}님은 레벨 ${level}의 ${jobClass}입니다")}

            "1차전직" -> {
                getFirstJobClass()
            } // 1차 전직 함수 실행

            else -> {
                println("행동에 실패하였습니다")

                // 전직 여부에 따라 안내 다르게
                if (jobClass == "초보자") {
                    println("[레벨업], [상태창], [1차전직] 중 원하는 행동을 입력하세요")
                } else {
                    println("[레벨업], [상태창] 중 원하는 행동을 입력하세요")
                }
            }
        }

readLine() 값을 action에 대입한 다음,
when (action)으로 입력 값에 따라 명령을 실행하도록 했습니다

  • 레벨업 : 전위증가연산자(++) 활용
  • 1차전직 : 함수를 언급해서 when 문이 장황해지지 않도록 줄였습니다
  • else : if문에 비교연산자 (==)를 활용, 안내 문구를 다르게 노출

getFirtstJobClass() 함수

main() 함수 하단에 1차 전직 함수를 따로 만들어두었습니다

fun getFirstJobClass() {

    // 1차 전직을 중복으로 시도할 경우 경고문
    if (jobClass != "초보자") {
        println("${name}님은 이미 ${jobClass}입니다")
        return
    }

    // 레벨이 부족할 경우 경고문
    if (level < 10) {
        println("${name}님은 아직 레벨 ${level}이므로, 1차 전직까지 ${10 - level}레벨을 더 올리셔야 합니다")
        return
    }

    //readLine()입력 값을 wnatJob에 대입
    println("${name}님, 어떤 직업으로 전직하시겠어요?")
    println("[전사], [마법사], [궁수], [도적] 중 원하는 직업을 입력하세요")
    var wantJob: String = readLine().toString()

    //입력 값에 따라 jobClass를 변경
    when (wantJob) {
        "전사" -> { jobClass = "전사" }
        "마법사" -> { jobClass = "마법사" }
        "궁수" -> { jobClass = "궁수" }
        "도적" -> { jobClass = "도적" }
        else -> {
            println("전직에 실패하였습니다")
            return
        }
    }

    //안내 문구
    println("${name}님, ${jobClass}가 되신 것을 축하드립니다!")
    return
}

if 문을 활용해, jobClass와 level에 대한 예외사항을 처리했습니다
readLine()을 wantJob에 대입하고, 이를 when(wantJob)으로 확인합니다

jobClass 변수에 대입하여 직업을 변경하고, 안내문구를 출력합니다


readLine().toString

  • readLine() 활용 시, .toString으로 자료형 변경을 꼭 붙여줍니다 !

return

  • 리턴을 활용해, 함수의 흐름을 제어합니다

profile
디자이너의 개발 창업 도전기

0개의 댓글