+ 항공대학교 김철기 교수님의 객체 지향 프로그래밍 과목 내용를 정리한 글입니다.
do - while 문
1. do - while 사이의 루프 몸통을 실행한다.
2. while 키워드 다음에 있는 조건을 평가한다.
3. 참이면 1로 돌아가고, 거짓이면 루프문 다음 문장을 실행한다.
fun main() {
var sum = 0
// 0을 입력 받을 때까지 수들의 합을 반환
do {
val num = readLine()!!.toInt() // var보다는 val을 지향할 것
sum += num
} while (num != 0)
println("Sum: $sum")
}
while 문
- 1 ~ 101까지 수 중 하나 맞추기 (Up Down 게임)
import kotlin.random.Random
fun main() {
val num = Random.nextInt(1, 101)
// 1부터 101까지의 수들 중 난수 생성
var guess = 0
while (guess != num) { // 난수 num을 맞출 때까지 반복
guess = readLine()!!.toInt()
if (guess < num) println("Too Small")
else if (guess > num) println("Too big")
}
println("Right: it's $num")
}
- pdf 코드 오류: readLine => readLine()
- 더 좋은 코드: while문을 do-while문으로 바꾸고, var을 val로 변경한다.
import kotlin.random.Random
fun main() {
val num = Random.nextInt(1, 101)
// 1부터 101까지의 수들 중 난수 생성
do {
val guess = readLine()!!.toInt()
// val로 변경, 처음 루프를 돌기 위해서는 guess가 필요하지 않고 그냥 실행되므로 가능하다.
if (guess < num) println("Too Small")
else if (guess > num) println("Too big")
} while (guess != num) // 난수 num을 맞출 때까지 반복
println("Right: it's $num")
}
for 문
- 배열의 총 합 구하기
fun main() {
val a = IntArray(10) {it * it} // 0, 1, 4, 9, 16 ...
var sum = 0
// 배열 a의 값 모두 더하기
for (x in a) { // x는 iteration마다 불변 변수로 작동 (val)
sum += x
}
println("Sum: $sum") // 285
}
- 배열의 인덱스로 접근하여 총 합 구하기
fun main() {
val a = IntArray(10) {it * it} // 0, 1, 4, 9, 16 ...
var sum = 0
// 배열 a의 값 모두 더하기
for (i in 0 .. a.lastIndex) { // i는 0부터 a의 마지막 인덱스까지
sum += a[i]
}
println("Sum: $sum") // 285
}
- indices 함수를 이용하여 총 합 구하기
fun main() {
val a = IntArray(10) {it * it} // 0, 1, 4, 9, 16 ...
var sum = 0
// 배열 a의 값 모두 더하기
for (i in a.indices) { // i는 a의 모든 인덱스를 갖는다.
sum += a[i]
}
println("Sum: $sum") // 285
}
break 문
- break 문을 사용한 1 ~ 101까지 수 중 하나 맞추기 코드 1 (Up Down 게임)
import kotlin.random.Random
fun main() {
val num = Random.nextInt(1, 101)
// 1부터 101까지의 수들 중 난수 생성
while (true) { // 무한 루프
val guess = readLine()!!.toInt()
if (guess < num) println("Small")
else if (guess > num) println("Big")
else break // guess == num 이면 = break
}
println("Right: it's $num")
}
- break 문을 사용한 1 ~ 101까지 수 중 하나 맞추기 코드 2 (Up Down 게임)
import kotlin.random.Random
fun main() {
val num = Random.nextInt(1, 101)
// 1부터 101까지의 수들 중 난수 생성
while (true) { // 무한 루프
val guess = readLine()!!.toInt()
val message =
if (guess < num) "Small"
else if (guess > num) "Big"
else break // guess == num 이면 = break
println(message)
}
println("Right: it's $num")
}
continue 문
- 주어진 문자열에서 각 알파벳 등장 횟수를 저장한 리스트를 반환하는 함수
fun main() {
val text = readLine()!!
val counts = countLetters(text)
for (i in counts.indices)
println("${'a' + i}: ${counts[i]}")
}
fun countLetters(text: String): IntArray {
val counts= IntArray('z' - 'a' + 1)
// 알파벳 개수 크기의 Int형 배열 (모든 요소가 0으로 초기화)
for (char in text) {
val charLower = char.toLowerCase() // charLower는 char를 소문자로 변경한 값
if (charLower !in 'a'..'z') continue // charLower가 소문자가 아니라면
counts[charLower - 'a'] ++ // a: 0, b: 1, c: 2 인덱스에 개수 저장
}
return counts
}
내포된 루프와 레이블
- break와 continue 문은 가장 안쪽의 루프에 적용된다.
- 이를 바깥쪽 루프에 적용 시키고 싶을 때 레이블 사용한다.
fun main() {
val arr = intArrayOf(2, 7, 3, 4, 6, 9, 4, 2)
val sub = intArrayOf(4, 2, 7)
println(indexOf(sub, arr))
}
// 하나의 정수 배열 (array) 내에서 하위 배열(subarray)이 시작하는 인덱스를 찾는 함수
fun indexOf(subarray: IntArray, array: IntArray): Int {
outerLoop@for (i in array.indices) { // outerLoop@ 라벨로 라벨링
for (j in subarray.indices) {
if (i + j >= array.size || subarray[j] != array[i + j]) continue@outerLoop // outerLoop@가 있는 바깥 루프로 빠져나감
// 현재 검사 중인 subarray와 array의 요소가 다르면 array의 다음 인덱스 부터 다시 탐색
// i + j >= array.size ||를 추가해 인덱스 범위를 벗어나는 에러를 제거
}
return i // subarray의 모든 요소가 array에 차례대로 존재한다면 i 반환 (@outerLoop에 걸리지 않음)
}
return -1 // 모든 탐색이 끝났는데도 array내에서 subarray를 찾지 못했다면 -1 반환
}
- pdf 코드 오류: ArrayIndexOutOfBoundsException 발생 => i + j >= array.size || 추가
'Study > Kotlin Study' 카테고리의 다른 글
[Kotlin] 클래스 정의하기 (1) | 2023.08.28 |
---|---|
[Kotlin] 예외 처리 (0) | 2023.08.25 |
[Kotlin] 조건문 (2) | 2023.08.23 |
[Kotlin] 패키지: 패키지 개요 (2) | 2023.08.22 |
[Kotlin] 증가 감소 연산자 (1) | 2023.08.20 |