質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

2回答

532閲覧

kotlin 『変化し続ける数値』 と『変化しない数値』の計算をしたい

nasuosin

総合スコア6

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

1クリップ

投稿2019/09/14 12:04

編集2019/09/14 12:06

表題の通り、ランダムに0.5秒ごとに切り替わる数値(以下A)と、ある一定の数値(B)の計算をする機能を実装したいです。
その計算結果もAと同様に0.5秒ごとに切り替わるように表示させたいです。

まずAは、0.5秒ごとに100以下の数値がランダムに切り替わって表示されます。
以下、コード
MainActivity.kt

kotlin

1 2override fun onCreate(savedInstanceState: Bundle?) { 3 super.onCreate(savedInstanceState) 4 setContentView(R.layout.activity_main) 5 6//100以下の数値を0.5秒ごとにランダム表示(スタートボタンで開始) 7 buttonSTART.setOnClickListener { 8 GlobalScope.launch { 9 while (true){ 10 delay1(500L) 11 textView.text = "${(1..100).random()}" 12 } 13 } 14 }

ランダムに表示するビュー
activity_main.xml

kotlin

1 <TextView 2 android:layout_width="0dp" 3 android:layout_height="0dp" 4 android:id="@+id/textViewNumberA" 5 android:textAlignment="center" 6 android:background="@android:color/darker_gray" 7 android:textSize="36sp" 8 app:layout_constraintTop_toBottomOf="@+id/buttonMOVE" 9 app:layout_constraintEnd_toStartOf="@+id/buttonEMG" 10 android:layout_marginBottom="17dp" 11 app:layout_constraintStart_toStartOf="parent" 12 android:layout_marginStart="25dp" 13 app:layout_constraintBottom_toBottomOf="parent" 14 android:layout_marginEnd="21dp" 15 />

一定の値Bを入力するのEditText

kotlin

1 2 <EditText 3 android:layout_width="0dp" 4 android:layout_height="0dp" 5 android:inputType="number" 6 android:ems="10" 7 android:id="@+id/editNumberB" 8 android:background="@android:color/darker_gray" 9 android:autofillHints="" tools:ignore="LabelFor" 10 app:layout_constraintTop_toBottomOf="@+id/visualizer" app:layout_constraintEnd_toStartOf="@+id/mvc" 11 app:layout_constraintBottom_toTopOf="@+id/buttonMOVE" app:layout_constraintStart_toStartOf="parent" 12 android:layout_marginStart="21dp" android:layout_marginEnd="15dp" 13 /> 14 15

Webで計算アプリの作り方などを参照して書いてみたのですが、もちろんうまくいかず、
ガバガバなコードになっていると思います。

流れとしては、
1.Bを入力
2.スタートボタンを押すと、Aが0.5秒ごとに表示(View1)、と同時に計算結果も表示(View2)

になります。

以下、書いてみたコード(本当にぐちゃぐちゃなコードです)

kotlin

1 2//計算 3 buttonSTART.setOnClickListener { 4 5 //数値Bの入力を取得 6 val get_b = findViewById<EditText>(R.id.editNumberB) 7 val st_b = editNumberB.text.toString() 8 9 //数値Aを取得 10 val get_a = findViewById<TextView>(R.id.textViewNumberA) 11 val st_a = textViewNumberA.text.toString() 12 13 val a = Integer.parseInt(st_a) 14 val b = Integer.parseInt(st_b) 15 16 //計算 17 val kekka = b / a * 100 18 19 //表示 20 val set_kekka = findViewById<TextViewKekka>(R.id.mvc) 21 }

エミュレーターでランさせたところ、STARTボタンをおしたところでアプリが落ちます。

アドバイスよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keicha_hrs

2019/09/14 12:57 編集

AnonymouZさんとkakajikaさんの助言を全く受け入れずに突き進んでも良い結果は得られないと思います。
guest

回答2

0

  • textViewNumberAというTextView
  • editNumberBというEditText
  • buttonSTARTというButton
  • mvcというTextView

の4つがあったとして、

  • buttonSTARTを押したらtextViewNumberAに1〜100の数字を0.5秒ごとにランダム表示
  • editNumberBに適当な数値を入力したら、その値とtextViewNumberAとを計算して、計算結果をtextViewNumberAの表示更新と同じタイミングでmvcに表示。

という解釈でざっくり書いてみました。(細かいエラー処理は想定していない)

MainActivity.kt

kotlin

1package (自分のパッケージ名) 2 3import android.os.Bundle 4import android.view.inputmethod.EditorInfo 5import android.widget.TextView 6import androidx.appcompat.app.AppCompatActivity 7import kotlinx.android.synthetic.main.activity_main.* 8import kotlinx.coroutines.* 9 10class MainActivity : AppCompatActivity(), CoroutineScope by MainScope() { 11 12 override fun onCreate(savedInstanceState: Bundle?) { 13 super.onCreate(savedInstanceState) 14 setContentView(R.layout.activity_main) 15 16 var editNumberBVal = 0 17 18 editNumberB.setOnEditorActionListener(TextView.OnEditorActionListener { _, actionId, _ -> 19 if (actionId == EditorInfo.IME_ACTION_DONE) { 20 // ソフトウェアキーボードの確定キーを押したときの値を覚えておく 21 editNumberBVal = editNumberB.text.toString().toInt() 22 return@OnEditorActionListener true 23 } 24 false 25 }) 26 27 buttonSTART.setOnClickListener { 28 // GlobalScopeは使わない 29 launch { 30 while (true) { 31 delay(500L) 32 val textViewNumberAVal = (1..100).random() 33 34 // 計算する 35 val result = (editNumberBVal.toDouble() / textViewNumberAVal * 100).toInt() 36 37 textViewNumberA.text = "$textViewNumberAVal" 38 mvc.text = "$result" 39 } 40 } 41 } 42 } 43 44 override fun onDestroy() { 45 super.onDestroy() 46 cancel() // コルーチンを止める 47 } 48}

app/build.gradle(1行追加)

gradle

1dependencies { 2 (省略) 3 implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.1" 4 (省略) 5}

とりあえずこんなので叩き台になりますか?

投稿2019/09/14 14:31

編集2019/09/15 02:53
keicha_hrs

総合スコア6768

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nasuosin

2019/09/14 16:44

回答ありがとうございます。 また、細かくコードを教えてくださってありがとうございます。 教えていただいたコードを参考に実装してみたところ、importの追加や細かなエラー修正のみでほぼ同じコードの形で参考になりました。 しかし、launchとdelayのエラーを修正できずにいます。 Unresolved reference. None of following candidates is applicable because of receiver type mismatch: public fun CoroutineScope.launch(context: CoroutineContext = ..., start: CoroutineStart = ...,block: suspend CoroutineScope.()→ Unit): job defined in kotlinx.coroutines というエラー文が出ました。 誠に恐縮ですが、このエラー文から考えられることはありますか?
keicha_hrs

2019/09/15 02:37

app/build.gradleのdependenciesブロックに implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.1" の記述はあるのでしょうか?
nasuosin

2019/09/16 03:31

確認したところ、 1.3.1の部分が1.1.1となっていました。 再度書き直して試してみます。
keicha_hrs

2019/09/16 07:43 編集

まずlaunchやdelayが正しく使えないのは、質問者様がどこかで誤った記述をしているためなのか、そうではないのかで切り分けた方が良いと思います。まずは新規プロジェクトを作って私と全く同じコードを記述して、ノーエラーで通るのかどうか確かめてみませんか。それがノーエラーで通ることを確認できたのなら、ご自身で作ったプロジェクトには何かしら誤った記述があるということです。コルーチンについては実験的に公開されていた時期があるので、古い資料を参考にして組み込んだらうまくいかない可能性があります。今日現在の新しい情報に基づいて作るべきです。
guest

0

変化するどーこーとは関係なく、とにかく2つの値の計算、表示をきちんと完成させましょう。
まずはそれからのはなしです。

投稿2019/09/14 13:07

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nasuosin

2019/09/14 13:16

回答ありがとうございます。 AをランダムではなくBと同じように普通に数値を入力する場合とした時は問題なく計算、表示はできております。 しかしAが変化し続けている場合の、まさしく計算、表示がうまくいかず止まっております。 その計算、表示ができればそれで解決するのですが、情報収集に戸惑っております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問