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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

711閲覧

ボタンを押されるたびに初期化するのをなんとかしたい

syosinsya109

総合スコア41

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2022/09/06 12:52

編集2022/09/07 06:55

前提

javaについて質問します。
android studioで電卓のアプリを作っており、一番最初にArrayListを初期化し、ボタンを押されるたびにその配列に値を追加しようと思っています。しかしどこに初期化文を入れてもボタンを押されるたびに初期化されてしまい、またtrycatchなどを入れて1回しか初期化しないようにしたとしてもArrayListを定義されていないみたいなエラーが出てきてしまいどうしてもできません。正しい初期化方法を教えてください。

該当のソースコード

java

1 private class ButtonClickListener implements View.OnClickListener{ 2 ArrayList<String> num = new ArrayList<String>(); 3 ArrayList<String> print = new ArrayList<String>(); 4 @Override 5 public void onClick(View view) { 6//formulaは計算を表示する部分、resultは計算結果を表示する部分 7 TextView formula = findViewById(R.id.formula); 8 TextView answer = findViewById(R.id.result); 9 10//zeroは0を出力するボタン、oneは1を出力するボタン 11 if (view.getId() == R.id.zero) { 12 num.add("0"); 13 print.add("0"); 14 }else if (view.getId() == R.id.one) { 15 num.add("1"); 16 print.add("1"); 17 } 18以下省略 19 for(String value : print){ 20 answer.setText(value); 21 } 22 System.out.println(print); 23 System.out.println(num); 24//結果は押されるたびに初期化されるので押された数字のみが代入される 25 } 26 } 27}

試したこと

初期化の位置を変えたり、if文やtrycatchを使用してみたが、初期化されていないというエラーが出てきたり、ボタンを押すたびに初期化されたりして自力では解決できなかった。
ネットでもそれらしき回答が得られなかった

補足情報(FW/ツールのバージョンなど)

android studioを使い始めて間もないのでバージョンの確認方法がわかりません。それも教えてくれると嬉しいです。

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

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

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

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

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

BeatStar

2022/09/06 13:13

違うところで書き換わっていたりして…
jimbe

2022/09/06 13:43

配列が見当たりません。
dodox86

2022/09/06 17:12

「配列」や「初期化」、用語の使い方が誤っていると見えて、話が一部噛み合っていないようです。ボタンを押すたびに値は追加されていってはいますが表示の仕方に問題があるでしょう。この点については回答を既にいただいていますね。
syosinsya109

2022/09/07 01:58

どのような配列が見当たらないのでしょうか。 numとprint配列は数値のボタンが押される度にaddメソッドで追加しています。 それかListは配列では無いのでしょうか。それなら自分の間違いです。すいません。
syosinsya109

2022/09/07 06:56

無知ですいません。配列ではなくArrayListです。間違いを訂正しました。 指摘ありがとうございました
guest

回答2

0

自己解決

自己解決しました。
private class ButtonClickListener implements View.OnClickListener{
}
の上に初期化を置くことで、1回のみ初期化することに成功しました。これは自分のテスト不足です。すいません。
回答してくれた方ありがとうございました!

投稿2022/09/07 15:37

syosinsya109

総合スコア41

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

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

0

answer.setText(value);

setText の仕様を確認しては如何でしょうか。


コメントより:

確認済みです。
質問に書いていませんでしたが、value値には、printの値が入りますので、押された数値のみが出力されてしまいます。

value は 拡張 for 文によって List である print の各要素=文字が一文字ずつ設定されて setText に渡されています。
TextView - setText

Sets the text to be displayed.
「表示するテキストを設定します。」 (by Google 翻訳 )

「設定」です。通常 "設定" という場合は上書きであり、"追加" ではありません。
(蛇足ですが、 java で推奨される命名では setXXX() というメソッドは設定、addXXX() や appendXXX() は追加、という感じです。)
複数回 setText を実行すると、最後に実行したものだけが残ることになります。
結果として、 print の最後の文字、つまり最後に押した文字が TextView に残ります。
初期化は関係ありません。

print にある全ての文字を表示したいのであれば、全てを繋げた文字列に編集した上で、その文字列で一回だけ setText することになるでしょう。

投稿2022/09/06 13:45

編集2022/09/07 04:07
jimbe

総合スコア12646

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

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

syosinsya109

2022/09/07 02:00

確認済みです。 質問に書いていませんでしたが、value値には、printの値が入りますので、押された数値のみが出力されてしまいます。
syosinsya109

2022/09/07 06:58 編集

結果として、 print の最後の文字、つまり最後に押した文字が TextView に残ります。の部分は理解しました。 ですがprintが初期化され続けている以上どのようにプログラムを書いたところで一文字しか出力されません。
jimbe

2022/09/07 12:13

ご提示のコードに print を初期化している個所は見当たりません。 ただ、ご提示のコード **以外の部分** であり得そうな心配があります。 電卓のボタンに ButtonClickListener を登録する際、それぞれのボタン毎に button.setOnClickListener(new ButtonClickListener()) などと登録していたりしないでしょうか。 可能でしたら ButtonClickListener を登録している部分などのコードもご提示して頂けますか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問