if (조건식A) {
aaa
} else if (조건식B) {
bbb
} else {
ccc
}
조건식A가 참이면 aaa를 실행
조건식B가 참이면 bbb를 실행
둘다 거짓이면 ccc를 실행
when (변수) {
A -> {
aaa
}
B -> {
bbb
}
}
변수가
A면 aaa를 실행
B면 bbb를 실행
for (변수 in 목록) {
aaa
}
목록을 변수에 하나씩 대입하며 코드를 반복해 실행합니다
목록의 범위는 아래와 같이 쓸 수 있습니다
for (i in 1 until 3) {
println(" ${i}번째 반복 ")
}
for (i in 1 .. 3) {
println(" ${i}번째 반복 ")
}
var array = arrayOf("A", "B", "C")
for (i in array) {
println(" 목록에 ${i}를 확인했어 ")
}
arrayOf()
배열을 만듭니다
for (i in 배열)
배열을 순서대로 반복해 실행합니다
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문을 반복합니다
만난 동물을 포획하면, 포만감이 올라가는 로직입니다
그러나, 사람을 만나면 포만감 로직을 생략합니다
곰을 만나면 반복문이 완전히 종료됩니다
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)으로 입력 값에 따라 명령을 실행하도록 했습니다
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 변수에 대입하여 직업을 변경하고, 안내문구를 출력합니다