Learn & Record

Kotlin (연습문제, while, doWhile, while_doW 차이, break, continue, 연습문제~5, 배열) 본문

Dev/Kotlin

Kotlin (연습문제, while, doWhile, while_doW 차이, break, continue, 연습문제~5, 배열)

Walker_ 2024. 4. 8. 17:23

1.별 출력

fun main() {
    for(i in 1..4){
        for (k in 1..i) {
            print('*')
        }
        println()
    }
}

//*
//**
//***
//****

 

2. while 반복문

 - for문의 특정 범위만큼 반복하기 위한 구문이라면, while 문은 특정 조건이 만족할 때까지 반복하기 ㅜ이한 구문

fun main() {
    // current 변수가 인덱스의 역할
    var current = 1
    val until = 12
    while (current < until) {
        println("현재 값은 ${current}입니다.")
        current++
    }
}

/*
현재 값은 1입니다.
현재 값은 2입니다.
현재 값은 3입니다.
현재 값은 4입니다.
현재 값은 5입니다.
현재 값은 6입니다.
현재 값은 7입니다.
현재 값은 8입니다.
현재 값은 9입니다.
현재 값은 10입니다.
현재 값은 11입니다.
 */

 

3. do와 함께 사용하기

 - do와 함께 사용하면 while문의 조건식과 관계없이 do 블록 안의 코드를 한 번 실행

fun main() {
    var game = 1
    val match = 6
    do {
        println("${game}게임 이겼습니다. 우승까지 ${match-game}게임 남았습니다.")
        game++
    }while (game < match)
}
/*
1게임 이겼습니다. 우승까지 5게임 남았습니다.
2게임 이겼습니다. 우승까지 4게임 남았습니다.
3게임 이겼습니다. 우승까지 3게임 남았습니다.
4게임 이겼습니다. 우승까지 2게임 남았습니다.
5게임 이겼습니다. 우승까지 1게임 남았습니다.
 */

 

4. while과 do ~ while의 차이점

 - 가장 큰 차이점은 최초 값이 조건식을 만족하지 않았을 경우 실행 코드가 달라지는 것

 - do ~ while은 조건과 상관없이 처음 한 번 로그가 출력

fun main() {
    var game = 6
    val match = 6
    while (game < match) {
        println("while 테스트입니다.")
        game++
    }

    // do ~ while 테스트
    game = 6
    do {
        println("do ~ while 테스트입니다.")
        game++
    } while (game < match)
}
/*
do ~ while 테스트입니다.
 */

 

5. break

 - 반복문 탈출하기

 - 특정 조건에서 무조건 반복문 블록에서 벗어날 때 사용

fun main() {
    for (index in 1..10) {
        println("현재 index는 ${index}입니다.")
        if (index > 5) { // index가 5보다 크면 break 명령어로 현재 반복문을 벗어남
            break
        }
    }
}

/*
현재 index는 1입니다.
현재 index는 2입니다.
현재 index는 3입니다.
현재 index는 4입니다.
현재 index는 5입니다.
현재 index는 6입니다.
 */

 

6. continue

 - 반복문 내에서 coninue를 만나면 continue 1) 다음 코드는 실행하지 않고 2) 반복문의 코드의 처음으로 돌아감

fun main() {
    for (except in 1..10) {
        // except가 3보다 크고 8보다 작으면 continue 명령으로 로그를 찍지 않고 다름 반복문으로 이동
        if (except > 3 && except < 8) {
            continue
        }
        println("현재 index는 ${except}입니다.")
    }
}

/*
현재 index는 1입니다.
현재 index는 2입니다.
현재 index는 3입니다.
현재 index는 8입니다.
현재 index는 9입니다.
현재 index는 10입니다.
 */

 

7. 연습문제

package `20240405`

/*
     while문과 Range.random() 메소드를 이용해서 2개의 주사위를 던졌을 때 나오는 눈을 (눈1, 눈2) 형태로 출력하고,
    눈의 합이 5가 아니면 계속 주사위를 던지고, 눈의 합이 5이면 실행을 멈추는 코드를 작성해 보세요.
    눈의 합이 5가 되는 조합은 (1, 4), (4, 1), (2, 3), (3, 2)입니다.
     예 ) (5, 1)
    (4, 4)
    (6, 5)
    (5, 2)
    (3, 6)
    (1, 2)
    (2, 3)

    * Range.random()
    어떤 숫자가 범위의 정의된 Range 객체의 random() 메소드를 호출하면 그 범위의 무작위 숫자가 리턴
 */

fun main() {
    while(true) {
        val num1 = (1..6).random()
        val num2 = (1..6).random()
        println("($num1, $num2)")
        if (num1 + num2 == 5) {
            break;
        } else {
            println("($num1, $num2)")
        }
    }

    println("--------------------------")

    do {
        val num1 = (1..6).random()
        val num2 = (1..6).random()
        println("($num1, $num2)")
    } while (num1 + num2 != 5)
}

 

8. 연습문제2

package `20240405`

fun main() {
    /*
    음수가 입력될 때까지, 사용자가 입력한 정수의 합계를 계산하여 출력하는 프로그램을 작성하세요.
    while문을 사용, break 사용하지 말 것
    1) while문으로 작업
    2) do while문으로 작업
     */
    var whileOnOff = true
    var sum = 0;
    var sum2 = 0;

    while (whileOnOff) {
        print("정수를 입력해주세요(음수 입력 시 종료) >> ")
        var num = readln().toInt()
        if (num < 0) {
            println("정수의 합은 $sum 입니다.")
            whileOnOff = false;
        }
        sum += num;
    }

    println("-----------------do While----------------------")

    do {
        print("정수를 입력해주세요(음수 입력 시 종료) >> ")
        var num = readln().toInt()
        if (num < 0) {
            println("정수의 합은 $sum2 입니다.")
        }
        sum2 += num;
    } while (num > 0)

    println("-----------------선생님 코드----------------------")
    var sum3 = 0
    var value = 0

    // while문의 조건이 1) 처음에 참이 되어야 하고 2) 합에 영향을 미치지 않아야 함
    while (value >=0) {
        sum3 += value
        print("정수를 입력하세요: ")
        value = readln().toInt()
    }
    println("정수의 합계는 ${sum3}입니다.")
}

 

9. 연습문제 3 

package `20240405`

fun main() {
    /*
    컴퓨터가 주사위를 던지면 사용자가 주사위의 숫자를 맞히는 프로그램을 완성하세요.
    사용자가 맞힐 때까지 게임은 계속 됩니다.

    예)
    주사위 값은 얼마일까요? >>> 5
    오답입니다. 다시 시도하세요.
    주사위 값은 얼마일까요? >>> 1
    1! 정답입니다.

    1) break를 사용
    2) break를 사용안하는 경우
     */
    val question = (1..6).random()

    while (true) {
        print("주사위 값은 얼마일까요? >>> ")
        var answer = readln().toInt();
        if (question == answer) {
            println("${answer}! 정답입니다.")
            break;
        }
        println("오답입니다. 다시 시도하세요.")
    }

    do {
        print("주사위 값은 얼마일까요? >>> ")
        var answer = readln().toInt();
        println("오답입니다. 다시 시도하세요.")

        if (question == answer) {
            println("${answer}! 정답입니다.")
        }

    } while (answer != question)
}

 

10. 배열

 - 코틀린 뿐만 아니라 대부분의 컴퓨터 언어들은 이 처럼 여러 개의 값을 하나의 변수에 저장할 수 있도록

 - 배열 Array과 컬렉션 Collection 이라는 데이터 타입을 제공

 

 - 1. 배열 Array

 - 여러 개의 값을 담을 수 있는 대표적인 자료형인 배열은 값을 담기 전에 먼저 배열 공간의 개수를 할당하거나

 - 2) 초기화 시에 데이터를 저장해 두면 데이터의 개수만큼 배열을 크기가 결정

 - 먼저 개수를 정해 놓고 사용해야 하며 중간에 개수를 추가하거나 제거할 수 없음

 

 - 배열은 다른 데이터 타입과 마찬가지로 변수로 저장해서 사용할 수 있으며 다음과 같은 형태로 선언

 - var 변수 = Array(개수)

 - 배열 객체는 Int, Long, Char 등과 같은 기본 타입뒤에 Array를 붙여서 만듬

 

var students: IntArray = IntArray(10) // 변수 student에 Int(정수형) 공간을 10개 할당하라는 의미.
var longArray = LongArray(10)
var charArray = CharArray(10)
var floatArray = FloatArray(10)
var doubleArray = DoubleArray(10)

 

println(students[0]) // 0 -> 따로 초기화 하지 않으면 0으로 초기화
/*
1) 문자열 배열에 빈 공간 할당하기
String은 기본 타입이 아니기 때문에 StringArray는 없지만 다음과 같이 사용할 수 있음
수식이 조금 특이해 보일 수 있지만 일단은 괄호 안의 첫 번째 숫자인 10만 변경해서 사용하면
그 숫자만큼 빈 문자열로 된 배열 공간을 할당
-> 자바에서는 문자열 배열을 생성하면서 초기화 하지 않으면 null이 초기값이 됨
하지만 코틀린은 기본적으로 null 사용을 허용하지 않기 때문에
빈 문자열을 이용해서 따로 초기화 해야 함
 */
var stirngArray = Array(10, {item->""})

 

/*
2) 값으로 배열 공간 할당하기
arrayOf() 함수를 사용해서 String값을 직접 할당할 수도 있음
 */
var dayArray: Array<String> = arrayOf("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN")

var intArray: IntArray = intArrayOf(1,2,3,4,5,6,7,8,9,10)
var intArray2: Array<Int> = arrayOf(1,2,3,4,5,6,7,8,9,10)

 

/*
3) 배열에 값 입력하기

다음은 배열에 인덱스에 있는 값을 바꾸는 방법을 다른 방식으로 표현한 것
이 두 방식은 표현식만 다를 뿐 동일한 코드
1. 배열을 선언한 변수명 옆에 대괄호([])를 사용하고, 대괄호 안에 값을 저장할 위치의 인덱스 번호를 작성
그리고 등호(=)를 사용해서 값을 입력하면 됨
배열명[인덱스] = 값

2. set메서드를 사용할 수 있음. 배열이 제공하는 set() 메서드에 인덱스와 값을 파라미터로 넘겨주면 됨
배열명.set(인덱스, 값)
 */

students[0] = 90
students.set(1, 91)

 

4) 배열에 있는 값 꺼내기
값을 입력할 때와 같은 방식으로 인덱스로 값을 가져올 수 있음
저장할 때와 마찬가지로 대괄호 안에 인덱스를 입력해서 가져올 수 있으며 값을 꺼내는 배열의 메서드는 get()
배열명[인덱스]
배열명.get(인덱스)
 */
// 배열 students의 일곱번째 값을 seventhValue 변수에 저장
var seventhValue = students[6]

// 배열 students의 열번째 값을 tenthValue 변수에 저장
var tenthValue = students.get(9)

 

11. 연습문제4

fun main() {
    /* for문을 이용해서 arr 배열의 합을 구하세요 */
    val arr = intArrayOf(10, 20, 30, 40, 50)
    var sum = 0

    // 작성 위치
    // 1. untile 사용
    for (i in 0 until arr.size) {
        sum += arr[i]
    }

    // 2. for in 사용
    sum = 0
    for (item in arr) {
        sum += item
    }
    println("sum = $sum") // 150

    // 3. indices 사용
    println(arr.indices) // 0..4
    sum = 0
    for (i in arr.indices) {
        sum += arr[i]
    }
    println("sum = $sum") // 150

    for (num in arr) {
        sum += num
    }
    println(sum)
}

 

12. 연습문제 5

package `20240408`

import java.util.*

fun main() {
    /* 키보드로 부터 학생 수와 각 학생들의 점수를 입력받아서, 최고 점수 및 평균 점수를 구하는 프로그램입니다.
    실행결과를 보고 알맞게 작성해 보세요.

    실행 예)
    -----------------------------------------------------
    1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료
    -----------------------------------------------------
    선택> 1
    학생수> 3
    [0, 0, 0]
    -----------------------------------------------------
    1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료
    -----------------------------------------------------
    선택> 2
    scores[0]> 90
    scores[1]> 80
    scores[2]> 70
    -----------------------------------------------------
    1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료
    -----------------------------------------------------
    선택> 3
    scores[0]: 90
    scores[1]: 80
    scores[2]: 70
    -----------------------------------------------------
    1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료
    -----------------------------------------------------
    선택> 4
    최고 점수: 90
    평균 점수: 80.0
    -----------------------------------------------------
    1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료
    -----------------------------------------------------
    선택> 5
    프로그램 종료
     */

    var run = true // 반복문의 조건을 사용 -> 값이 false가 된다면 반복문이 종료
    var studentNum: Int = 0 // 학생수
    var scores: IntArray = IntArray(studentNum) // 점수를 입력 받을 빈 배열 생성. 사용자에게 입력받은 학생수를 기준으로 배열 생성
    while (run) {
        println("----------------------------------------------------------")
        println("1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료")
        println("----------------------------------------------------------")
        println("선택> ")
        val selectNo = readln().toInt()
            when (selectNo){
                1 -> {
                    // 작성 위치. 학생수를 입력 받아서 배열 생성
                    print("학생 수 > ")
                    studentNum = readln().toInt()
                    scores = IntArray(studentNum)
                    println(Arrays.toString(scores))
                    continue
                }
                2 -> {
                    // 작성 위치. 생성된 배열의 갯수 만큼 점수 입력
                    for (i in 0 until  scores.size) {
                        print("scores[${i}] > ")
                        scores[i] = readln().toInt()
                    }
                    continue
                }
                3 -> {
                    // 작성 위치. 입력받은 배열의 값을 출력
                    for (i in 0 until scores.size) {
                        println("scores[${i}]: ${scores[i]}")
                    }
                    continue
                }
                4 -> {
                    // 작성 위치. 최고 점수, 평균 점수 출력
                    var sum = 0
                    for (i in 0 until scores.size) {
                        sum += scores[i]
                    }
                    println("최고 점수: ${scores.max()}")
                    println("평균 점수: ${(sum/scores.size).toFloat()}")
                    continue
                }
                5 -> {
                    // 작성 위치. run 값 변경
                    run = false
                }
        }
        println("프로그램 종료")
    }
}

 


공부 과정을 정리한 것이라 내용이 부족할 수 있습니다.

부족한 내용은 추가 자료들로 보충해주시면 좋을 것 같습니다.

읽어주셔서 감사합니다 :)