【Kotlin練習問題】rangeTo/..とcontains/inを用いた範囲のチェック
rangeToで値の範囲を作成する方法
KotlinではrangeTo()関数を用いることで、簡単に値の範囲を作成することができます。
rangeToの代わりに演算子”..“を用いることもできます。rangeTo()はよくinや!inと共に使われます。
if (i in 1..4) { //iが1から4の間 1 <= i && i <= 4と同じ コンパイラにはi in 1.rangeTo(4)と解釈される
print(i)
}
ちなみに1..4で渡される値はIntRange型という範囲を指定する型になります。
containsで範囲に含まれているかを確認する
ある値(i)がその範囲内にあるかを確認するにはcontains、またはinという演算子を用います。
上記のコードをcontainsを用いて表現する場合、以下のようになります。
if ((1..4).contains(i)) {
print(i)
}
問題
範囲指定を用いて、ある日付(date)がそれぞれ日付を表すfirstとlastの間(それぞれの値も含む)に含まれているかをチェックする関数を実装してください。
fun checkInRange(date: MyDate, first: MyDate, last: MyDate): Boolean {
return TODO()
}
※MyDateクラスは以下のように定義されているものとします。
//MyDate.kt
data class MyDate(val year: Int, val month: Int, val dayOfMonth: Int) : Comparable<MyDate> {
override fun compareTo(other: MyDate): Int {
if (year != other.year) return year - other.year
if (month != other.month) return month - other.month
return dayOfMonth - other.dayOfMonth
}
}
[expander_maker id=”1″ more=”ヒント” less=”非表示”]
ヒント
val list = listOf("a", "b")
"a" in list // list.contains("a")と同じ
"a" !in list // !list.contains("a")と同じ
date1..date2 // date1.rangeTo(date2)と同じ
Kotlinでは上記コードのようにinはcontainsに、..はrangeToに対応します。
[/expander_maker] [expander_maker id=”1″ more=”答え” less=”非表示”]答え
fun checkInRange(date: MyDate, first: MyDate, last: MyDate): Boolean {
return date in first..last
}
[解説]
dateがIntRange型のfirst..lastに含まれているかをdate in first..lastでチェックしています。
戻り値はBoolean型です。
[/expander_maker]その他の問題はこちらからどうぞ。
完全無料で通えるプログラミングスクール
プログラミング学習はどうしても一人だとつまづいてしまう時がきます。調べればわかることも少なくないですが、最初のうちは調べ方もわからないことが多いため、あまり効率的ではありません。
効率的かつ挫折せずにプログラミングを学習したい方はスクールを検討してみるのも一つの手です。
中には無料で通えるスクールや、就職保証をしてくれるスクールなどもあるので、きっとあなたの目的に応じて最適のスクールが見つかります!以下の記事で評判がよく特におすすめのスクールをいくつかピックアップしているので、スクール選びで後悔したくない方は御覧ください!
おすすめ書籍
Kotlinの文法をまず学びたい!という方には以下の書籍がおすすめです。Kotlinは日本語書籍がまだ豊富とは言えない状況ですが、細かく解説されており、Kotlin入門者のかたでもつまずくことなく学習できると思います。
[itemlink post_id=”1743″]実際にアプリを作りながら覚えていきたい!という方には以下もお勧めです。はじめに上の書籍で文法をさらっと学んでから取り組むのがお勧めです。
[itemlink post_id=”1745″]