↑↑2023年改訂版をご覧ください↑↑↑
↓↓以下は、旧版
▼コード自体はこちらをご参考ください(動画内の書き方は微妙に古いので「作業風景」として参考ください) ↓↓↓ |
Kotlinで、簡単な占いアプリの作り方を解説します。
主な学習のテーマは
●配列 arrayOf(“いぬ”, “さる”, “きじ”)
●ランダム表示 Random().nextInt()
です
▼動画
コード
▼activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/uranaiText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="今日の運勢"
android:textSize="30sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/uranaiBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="占う"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/uranaiText" />
</androidx.constraintlayout.widget.ConstraintLayout>
▼MainActivity.kt
package com.example.uranaiapp
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import java.util.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//1)Viewを取得(idで)
var tv:TextView = findViewById(R.id.uranaiText)
var btn:Button = findViewById(R.id.uranaiBtn)
//2)クリック処理
btn.setOnClickListener {
//4-1)配列で、文言を用意
var uranai = arrayOf("大吉","中吉","小吉","凶")
//tv.text = "大吉"
//3)乱数を作ってみる
var num = Random().nextInt(uranai.count())
//tv.text = num.toString()
//4-2)表示
tv.text =uranai.get(num)
}
}
}
テキスト
※xmlは省略
1&2)まずは前回の復習です。
ボタンを押したら、指定された文字が表示される、というのをやっていきましょう。
//1)idを取得 var tv:TextView = findViewById(R.id.uranaiText) var btn:Button = findViewById(R.id.uranaiBtn) //2)クリック処理 btn.setOnClickListener { tv.text = "大吉" }
ここまでは前回の復習です。
ボタンを押したら、文字がかわる、と。
今回はランダムに表示させたいと思います。
それから、前回なんの説明もなく書きはじめの宣言のところで var って使っていましたけど、 最初の書き出し文には valとvar、2種類あるというのを覚えておいてください。valはvalueのことで「値」とか「価値」「本質」って意味ですね。 スーパーでなんとかバリューってのがあるのでご存知かと思います。 一番の本質、とかって意味でしょうか。 値とか、本質って意味なので、valを使うと再代入ができません。 つまり、書き換え、変更ができません。 そういう意味で価値があります。一方 varはvariableで「変数」って意味ですが、 valと違って再代入、つまり変更が可能です。この言葉は馴染みがなくても、派生した言葉で varietyならわかるでしょうか。 色々な、とか多種多様なって意味ですね。 varの方は、だから変更が可能です。本来はvalを中心に使った方がいいとされています。 なぜなら、安易に書き換えができないから。 で、必要なところだけvar、 バラエティの方を使って書き換えできるようにした方がいいのですが、ある時はこっち、 別の時はこっち、だと、ちょっと初心者の方は混乱するかと思いますので このサイトは、基本的にバラエティ、variableの 変更可能な方でしばらく行きたいと思います。とにかく、シンプルに動けばOK、ということで。 まあ一応、そういう理屈があるということだけ知っておいてください。 |
//3)乱数を作ってみる
さて、話を戻しまして、ランダムですね。
ランダムに表示させるには、まずランダムな数字を作ってあげる必要がありまして
この辺は決まり文句なんですが
//3)乱数を作ってみる var num = Random().nextInt(5) tv.text = num
この()の中に数字をかいてあげます。
例えば5とか。
これで、0からこの数字未満、つまり今回は
0~4までの5つの数字がランダムで生成されます。
それではtvに表示させてみましょう。
これでOKかと思いきや、これだとエラーになります。
tvは、text,つまり文字列を要求しているのに対して
numは整数なので、型が一致しません。
なのでnumを文字列に変換してあげる必要があります
tv.text = num.toString()
これでnumがString、つまり文字列になったので
テキストに代入できます。
エミュレータで確認してみましょう。
ランダムで1~4までの数字が表示されているのがわかります。
それでは最後に、このランダムの数字を、大吉とか中吉とかの文言になるようにしてあげましょう。
//4)配列
今、数字がランダムで出るようになりました。
あとは、これが、大吉とか、中吉とか、
決められた文言が表示されるようにしましょう。
まずは配列で、文言を用意してあげます。
kotlinでは配列はarrayOfっていうのを使います。
***************************
arrayっていうのが、配列とか、整列とかの意味があるんですが、
このような書き方をします。
arrayOf(“いぬ”, “さる”, “きじ”)
arrayOf(1, 2, 3)
文字の場合は前後をちょんちょんで囲ってあげるので注意が必要です。
数字の場合は、そのままでOKです。
ちなみにコトリンでは、このように「なんとかOf」っていう言い方をよくします
listOfとか、setOfとか。
ということで、配列の場合はarrayOfを使っていきます。
***************************
文字列なので、ちょんちょんを入れるのを忘れないでください。
var uranai = arrayOf(“大吉”,”中吉”,”小吉”,”凶”)
それから、配列が4つなので、
ここも4に書き換えてあげましょう。
と、やってもいいんですが。
これ、毎回ここが変わるたびに、こっちも変えなければいけないのは
面倒し、ミスの原因になります。
なので、要素が何個あるかというのは
この変数に、.count() をしてあげることで
この中の個数を抽出してくれます。
ちなみに、ここが数字の場合
arrayOf(10,20,30,40,50)
は
uranai.size
を使えばOKなので、併せて覚えておきましょう。
一旦これはもとに戻しておきます。
これでnumの中にはuranaiの中の個数がランダムで生成されるようになったので
tv.text = uranai.get(num)
としてあげると、このなかの要素がランダムで表示されるはずです。
最後確認してみましょう。