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

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

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

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Android

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

Android Studio

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

Kotlin

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

Q&A

解決済

1回答

1350閲覧

Android StudioでKotlinを用い開発した電卓についての筆問です

kenken77

総合スコア1

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Android

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

Android Studio

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

Kotlin

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

0グッド

0クリップ

投稿2021/08/07 08:32

編集2021/08/07 09:27

前提・実現したいこと

https://qiita.com/yanasep/items/503b378c439752f70880#%E3%83%AC%E3%82%A4%E3%82%A2%E3%82%A6%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90
こちらのサイトを参考にAndroid studioで電卓を作ったのですがエミューターで実行すると keeps stopping というえらーがでてじっこうすることができません。build時に以下のメッセージが出るのですがおそらく関係ないと思います

**文字数の関係でfindViewByIdとXMl内のボタンを定義する部分を省略しています

発生している問題・エラーメッセージ

Name shadowed: i:226 (.ktの一番下です)

MainActivity.kt

kotlin

1package com.example.sugoidentaku 2 3import androidx.appcompat.app.AppCompatActivity 4import android.os.Bundle 5import android.widget.Button 6import android.widget.TextView 7import java.lang.Exception 8 9class MainActivity : AppCompatActivity() { 10 var nStr : String = "" 11 val nList = ArrayList<Double>() // arraylist to store numbers 12 val oList = ArrayList<Char>() // arraylist to store operations 13 var formula=findViewById<TextView>(R.id.formula) 14 15 16 override fun onCreate(savedInstanceState: Bundle?) { 17 super.onCreate(savedInstanceState) 18 setContentView(R.layout.activity_main) 19 20 21 22 button0.setOnClickListener{ 23 formula.text= "${formula.text}0" 24 nStr+="0" 25 } 26 27 button1.setOnClickListener{ 28 formula.text= "${formula.text}1" 29 nStr+="1" 30 } 31 32 button2.setOnClickListener{ 33 formula.text= "${formula.text}2" 34 nStr+="2" 35 } 36 37 button3.setOnClickListener{ 38 formula.text= "${formula.text}3" 39 nStr+="3" 40 } 41 42 button4.setOnClickListener{ 43 formula.text= "${formula.text}4" 44 nStr+="4" 45 } 46 47 button5.setOnClickListener{ 48 formula.text= "${formula.text}5" 49 nStr+="5" 50 } 51 52 button6.setOnClickListener{ 53 formula.text= "${formula.text}6" 54 nStr+="6" 55 } 56 57 button7.setOnClickListener{ 58 formula.text= "${formula.text}7" 59 nStr+="7" 60 } 61 62 button8.setOnClickListener{ 63 formula.text= "${formula.text}8" 64 nStr+="8" 65 } 66 67 button9.setOnClickListener{ 68 formula.text= "${formula.text}9" 69 nStr+="9" 70 } 71 72 buttonS.setOnClickListener{ 73 formula.text="${formula.text}." 74 nStr+="." 75 } 76 77 buttonW.setOnClickListener{ 78 formula.text="${formula.text}/" 79 nStr+="/" 80 } 81 82 buttonP.setOnClickListener{ 83 formula.text="${formula.text}+" 84 nStr+="+" 85 } 86 87 buttonM.setOnClickListener{ 88 formula.text="${formula.text}-" 89 nStr+="-" 90 } 91 92 buttonZ.setOnClickListener{ 93 formula.text="${formula.text}*" 94 addlist(nStr,'*') 95 nStr="" 96 } 97 98 buttonW.setOnClickListener{ 99 formula.text="${formula.text}÷" 100 addlist(nStr,'/') 101 nStr="" 102 } 103 104 buttonP.setOnClickListener{ 105 formula.text="${formula.text}+" 106 addlist(nStr,'+') 107 nStr="" 108 } 109 110 buttonDEL.setOnClickListener{ 111 var formulaStr=formula.text.toString() 112 if(!formulaStr.isEmpty()){ 113 formula.text = formulaStr.subSequence(0,formulaStr.lastIndex) 114 } 115 if(!nStr.isEmpty()){ 116 nStr=nStr.substring(0,nStr.lastIndex) 117 } 118 } 119 120 buttonC.setOnClickListener{ 121 formula.text="" 122 nStr="" 123 nList.clear() 124 oList.clear() 125 } 126 127 buttonI.setOnClickListener { 128 formula.text = "${formula.text}=" 129 addlist(nStr) 130 var result = calcualte().toString() 131 formula.text = result 132 nStr = result 133 nList.clear() 134 oList.clear() 135 } 136 buttonP.setOnClickListener { 137 formula.text = "${formula.text}+" 138 addlist(nStr,'+') 139 nStr = "" 140 } 141 buttonM.setOnClickListener { 142 formula.text = "${formula.text}-" 143 addlist(nStr,'-') 144 nStr = "" 145 } 146 buttonZ.setOnClickListener { 147 formula.text = "${formula.text}*" 148 addlist(nStr,'*') 149 nStr = "" 150 } 151 buttonW.setOnClickListener { 152 formula.text = "${formula.text}/" 153 addlist(nStr,'/') 154 nStr = "" 155 } 156 157 buttonQ.setOnClickListener { 158 formula.text = "${formula.text}%" 159 } 160 161 buttonX.setOnClickListener { 162 163 } 164 165 166 } // end fun onCreate 167 168 169 fun addlist(str:String, ope:Char){ 170 try{ 171 var num=str.toDouble() 172 nList.add(num) 173 if(ope!='=')oList.add(ope) 174 }catch (e:Exception){ 175 formula.text="Numeric error" 176 } 177 } 178 179 fun addlist(str: String){ 180 try { 181 var num=str.toDouble() 182 nList.add(num) 183 }catch (e:Exception){ 184 formula.text="Numeric errow" 185 } 186 187 } 188 189 fun calcualte() : Double { 190 191 var i = 0 192 while(i<oList.size){ 193 if(oList.get(i)=='*'||oList.get(i)=='/'){ 194 var result= if(oList.get(i)=='*') nList.get(i)*nList.get(i+1) else nList.get(i)/nList.get(i+1) 195 nList.set(i,result) 196 nList.removeAt(i+1) 197 oList.removeAt(i) 198 i-- 199 }else if(oList.get(i)=='-'){ 200 oList.set(i,'+') 201 nList.set(i+1,nList.get(i+1)*-1) 202 } 203 i++ 204 } 205 206 var result=0.0 207 for(i in nList){      ←←該当箇所 208 result+=i 209 } 210 211 return result 212 }// end fun calcualte 213 214 215 216 217}

activity_main.xml

XML

1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 tools:context=".MainActivity"> 8 9 <TableLayout 10 android:layout_width="match_parent" 11 android:layout_height="match_parent"> 12 13 <TableRow 14 android:layout_width="match_parent" 15 android:layout_height="match_parent"> 16 17 <TextView 18 android:id="@+id/formula" 19 android:layout_width="wrap_content" 20 android:layout_height="130dp" 21 android:layout_weight="1" 22 android:text="@string/formula_text" 23 android:textAlignment="viewEnd" 24 android:textSize="30sp" /> 25 </TableRow> 26 27 <TableRow 28 android:layout_width="match_parent" 29 android:layout_height="match_parent"> 30 31 ーー省略ーー 32 33 </TableRow> 34 35 <TableRow 36 android:layout_width="match_parent" 37 android:layout_height="match_parent"> 38 39 ーー省略ーー 40 41 </TableRow> 42 43 <TableRow 44 android:layout_width="match_parent" 45 android:layout_height="match_parent"> 46 47 ーー省略ーー 48 49 </TableRow> 50 51 <TableRow 52 android:layout_width="match_parent" 53 android:layout_height="match_parent"> 54 55 ーー省略ーー 56 57 </TableRow> 58 59 <TableRow 60 android:layout_width="match_parent" 61 android:layout_height="match_parent"> 62 63 ーー省略ーー 64 65 </TableRow> 66 </TableLayout> 67 68</androidx.constraintlayout.widget.ConstraintLayout>

試したこと

エミュレータを変えましたがどれも同じ結果になりました

Logcat

--error

イメージ説明

--warm

イメージ説明
イメージ説明

###Run

イメージ説明

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

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

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

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

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

hoshi-takanori

2021/08/07 09:35

MainActivify.kt の 13 行目で NullPointerException が起きてることが分かります。 たぶん var formula=findViewById<TextView>(R.id.formula) の行だと思いますが、findViewById は onCreate メソッドの中で setContentView した後に呼ぶ必要があります。
kenken77

2021/08/07 10:07

onCreate メソッドの中で setContentView した後に呼んだのですがほかの関数からのアクセスができなくなりました。どうすればよいでしょうか。 お手数かけて申し訳ございません
hoshi-takanori

2021/08/07 10:16

変数の宣言だけ元の場所で行って、代入を onCreate メソッドで行いましょう。
kenken77

2021/08/07 10:27

無事に解決しました! ご丁寧にありがとうございました。
guest

回答1

0

自己解決

findViewByIdをすべてonCreate メソッドの中で setContentView した後に呼び出すことで解決しました

投稿2021/08/07 10:29

kenken77

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問