[Kotlin] 5-1. 조건문과 반복문

leeeha·2022년 7월 6일
0

코틀린

목록 보기
13/28
post-thumbnail

출처: https://www.boostcourse.org/mo132/lecture/59982

조건문

if-else문의 간략화

var max: Int
if(a > b) max = a
else max = b
val max = if(a > b) a else b

블록과 함께 사용하는 경우

else if문으로 조건문 중첩하기

val num = 0
val result = if(num > 0) 
		"양수 값"
    else if(num < 0) 
    	"음수 값"
    else 
    	"0"

in 연산자로 조건식 간략하게 만들기

비교 연산자와 논리곱 연산자 사용

package chap05.section1

fun main() {
    print("Enter the score: ")
    val score = readLine()!!.toDouble()
    var grade = 'F'

    if(score >= 90.0){
        grade = 'A'
    }else if(score >= 80 && score <= 89.9){ // 비교 연산자, 논리곱 연산자 
        grade = 'B'
    }else if(score >= 70 && score <= 79.9){
        grade = 'C'
    }

    println("score: $score, grade: $grade")
}

범위(range) 연산자 사용

package chap05.section1

fun main() {
    print("Enter the score: ")
    val score = readLine()!!.toDouble() // 콘솔로부터 한줄 입력 받기 
    var grade = 'F'

    if(score >= 90.0){
        grade = 'A'
    }else if(score in 80.0..89.9){ // 시작값과 마지막값도 범위에 포함됨! 
        grade = 'B'
    }else if(score in 70.0..79.9){
        grade = 'C'
    }

    println("score: $score, grade: $grade")
}

switch-case문을 대체하는 when문

when(x){
	1 -> print("x == 1")
    2 -> print("x == 2")
    else -> {
    	print("x는 1, 2가 아니다.")
    }
}

when문에서는 switch-case문과 달리 break를 써줄 필요가 없다!!

package chap05.section1

fun main() {
    print("Enter an integer: ")
    val x = readLine()!!.toInt()
    when(x){
        0, 1 -> print("x == 0 or x == 1") // 여러 조건과 비교 
        else -> print("other")
    }
}
package chap05.section1
import java.lang.Integer.parseInt

fun main() {
    val s = "555"

    print("Enter an integer: ")
    val x = readLine()!!.toInt()

    when(x){
        parseInt(s) -> print("equals") // 함수의 반환값과 x를 비교 
        else -> print("other")
    }
}
package chap05.section1

fun main() {
    print("Enter an integer: ")
    when(readLine()!!.toInt()){
        in 1..10 -> print("x는 1 이상 10 이하") // in 연산자 사용 
        !in 10..20 -> print("x는 10 이상 20 이하가 아님")
        else -> print("other")
    }
}
package chap05.section1

fun main() {
    val str = "안녕하세요"
    val result = when(str) {
        is String -> "문자열" // is 키워드 사용 
        else -> false
    }
}
package chap05.section1

fun main() {
    print("Enter the score: ")
    val score = readLine()!!.toDouble() // 콘솔로부터 한줄 입력 받기
    
    val grade = when(score){
        in 90.0..100.0 -> 'A'
        in 80.0..89.9 -> 'B'
        in 70.0..79.9 -> 'C'
        else -> 'F'
    }

    println("score: $score, grade: $grade")
}

인자가 없는 when문

package chap05.section1

fun main() {
    print("Enter the score: ")
    val score = readLine()!!.toDouble()
    var grade: Char = 'F'

    when {
        score >= 90.0 -> grade = 'A'
        score in 80.0..89.9 -> grade = 'B'
        score in 70.0..79.9 -> grade = 'C'
        score < 70.0 -> grade = 'F'
    }

    println("score: $score, grade: $grade")
}

코드량이 많아지긴 하지만, 인자가 여러 개일 때는 특정 인자에 제한하지 않고 다양한 조건을 구성할 수 있다는 장점이 있다.


반복문

for문

fun main() {
    var sum = 0
    for(x in 1..10) sum += x 
    println("sum: $sum")
}
fun main() {
    for(i in 5 downTo 1) print(i) // 54321 
    for(i in 5 ..1) print(i) // error (아무것도 출력 안 됨)
}
fun main() {
    for(i in 1..5 step 2) print(i) // 135
    println()
    for(i in 5 downTo 1 step 2) print(i) // 531
}
fun main() {
    var total = 0

    for(num in 1..100 step 2) total += num
    println("Odd total: $total") // 홀수의 합 

    total = 0
    for(num in 0..99 step 2) total += num
    println("Even total: $total") // 짝수의 합
}

while문

fun main() {
    var i = 1
    while(i <= 5){
        println("$i") // 1 2 3 4 5 
        i++
    }
}

cf) 데몬 프로그램은 백그라운드에서 계속 돌아가야 하므로, 내부적으로 무한루프를 돌린다.

while(true){ 
	temp = 온도 검사 
    if(temp > 한계 온도) { 경고 발생 } 
    ... 
}

do while문

package chap05.section2

fun main() {
    do{ 
        print("Enter an integer: ")
        val input = readLine()!!.toInt()

        for(i in 0 until input){ // input 값은 제외 
            for(j in 0 until input){ 
                print((i + j) % input + 1) 
            }
            println()
        }
    }while(input != 0)
}

별찍기 예제

profile
꾸준히!

0개의 댓글