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

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

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

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

Android Studio

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

Q&A

2回答

2183閲覧

android studioにおける条件分岐についての質問

HYoshitaka

総合スコア14

Java

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

Android Studio

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

0グッド

0クリップ

投稿2020/04/04 07:02

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
android studio初心者です。
BMIの値によって条件分岐させ同じ画面に3通りの画像を表示させたいのですがエラーが表示されます。

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

エラー: 二項演算子'>'のオペランド型が不正です
最初の型: TextView
2番目の型: int

該当のソースコード

言語:java

package com.e.bmicalculatioon;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
private Button execCalcBMI; // [計算実行]ボタンへの参照
private EditText input_H; // 身長入力欄への参照
private EditText input_W; // 体重入力欄への参照
private TextView bmi_result; //★★★ BMI算出結果表示欄への参照

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); execCalcBMI = findViewById(R.id.button_exec_calc); // ボタンの参照を取得 input_H = findViewById(R.id.input_H_view); // 身長入力欄の参照を取得 input_W = findViewById(R.id.input_W_view); // 体重入力欄の参照を取得 bmi_result = findViewById(R.id.text_BMI_view); //★★★ 体重入力欄の参照を取得 // [計算実行]ボタン押下時の処理を追加 execCalcBMI.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { // 身長と体重の入力値を取得 double input_H_double = Double.valueOf(input_H.getText().toString()); double input_W_double = Double.valueOf(input_W.getText().toString()); double BMI = calcBMI(input_H_double, input_W_double); //★★★ BMI算出結果を表示 String result = String.format("%.1f", BMI); bmi_result.setText(result); ImageView imageView = (ImageView) findViewById(R.id.debu); if (bmi_result > 25) { imageView.setImageResource(R.drawable.debu); //textView.setText(a); } else if (bmi_result < 18.5) { imageView.setImageResource(R.drawable.hyojun); //textView.setText(a); } else { imageView.setImageResource(R.drawable.dal); } } }); } // BMI算出 private double calcBMI( double h, double w ){ // BMI = 体重 ÷ (身長 x 身長) double bmi = 0; if(w > 0 && h > 0) { bmi = w / (h * h) * 10000; } return bmi; }

}

試したこと

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

Android Studio 3.6.2

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

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

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

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

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

guest

回答2

0

TextView型と数値の比較はできません。

java

1 private double bmi_result; //★★★ BMI算出結果表示欄への参照 2 3 4 bmi_result = Double.parseDouble(findViewById(R.id.text_BMI_view).toString()); //★★★ 体重入力欄の参照を取得 5

のようにして、double型の数値として取得、比較すれば解決できるのではないでしょうか。

投稿2020/04/04 07:18

keicha_hrs

総合スコア6768

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

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

HYoshitaka

2020/04/04 08:09

ご回答ありがとうございます。 ご教示の通り入れてみたところ正しく走りました。 ただ、エミュレーターをからアプリを起動し、BMI値を計算すると結果が出る手前でアプリが落ちてしまいます。 考えられる原因は何でしょうか?
keicha_hrs

2020/04/04 08:30

bmi_result.setText(result); これ見落としてました。実行前にこれはエラーになりませんでしたか?これが文法エラーになって実行できないように思いますが、それは何か解決の手段を採ったのでしょうか。 bmi_resultがTextView型でなければ問題があるのならば、if文で比較する直前でdouble型のローカル変数にbmi_resultを変換してdouble型の値を得るようにしてみてはどうでしょうか。 それでもアプリが落ちるのならば、後はエラーログを見ないとわかりません。
HYoshitaka

2020/04/07 01:55

返信が遅くなりすみません。 コードを以下のように書き直しました。 package com.e.bmicalculatioon; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private Button execCalcBMI; // [計算実行]ボタンへの参照 private EditText input_H; // 身長入力欄への参照 private EditText input_W; // 体重入力欄への参照 private TextView bmi_result; //★★★ BMI算出結果表示欄への参照 private double bmi_result2; //★★★ BMI算出結果表示欄への参照 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); execCalcBMI = findViewById(R.id.button_exec_calc); // ボタンの参照を取得 input_H = findViewById(R.id.input_H_view); // 身長入力欄の参照を取得 input_W = findViewById(R.id.input_W_view); // 体重入力欄の参照を取得 bmi_result = findViewById(R.id.text_BMI_view); //★★★ 体重入力欄の参照を取得 // [計算実行]ボタン押下時の処理を追加 execCalcBMI.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { // 身長と体重の入力値を取得 double input_H_double = Double.valueOf(input_H.getText().toString()); double input_W_double = Double.valueOf(input_W.getText().toString()); double BMI = calcBMI(input_H_double, input_W_double); //★★★ BMI算出結果を表示 String result = String.format("%.1f", BMI); bmi_result.setText(result);//★★★ 体重入力欄の参照を取得 bmi_result2 = Double.parseDouble(findViewById(R.id.text_BMI_view).toString()); //テキストをdouble型へ変換 ImageView imageView = (ImageView) findViewById(R.id.debu); if (bmi_result2 > 25) { imageView.setImageResource(R.drawable.debu); //textView.setText(a); } else if (bmi_result2 < 18.5) { imageView.setImageResource(R.drawable.hyojun); //textView.setText(a); } else { imageView.setImageResource(R.drawable.dal); } } }); } // BMI算出 private double calcBMI( double h, double w ){ // BMI = 体重 ÷ (身長 x 身長) double bmi = 0; if(w > 0 && h > 0) { bmi = w / (h * h) * 10000; } return bmi; } } LogCatを見ながらエミュレーターのアプリを動かしてみると 計算を実行した後に以下のエラーが表示されました。 Process: com.e.bmicalculatioon, PID: 20951 java.lang.NumberFormatException: For input string: "androidx.appcompat.widget.AppCompatTextView{671b6ec V.ED..... ......ID 540,713-540,873 #7f0700b0 app:id/text_BMI_view aid=1073741830}" at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) at java.lang.Double.parseDouble(Double.java:538) at com.e.bmicalculatioon.MainActivity$1.onClick(MainActivity.java:41) at android.view.View.performClick(View.java:7125) at android.view.View.performClickInternal(View.java:7102) at android.view.View.access$3500(View.java:801) at android.view.View$PerformClick.run(View.java:27336) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7356) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
keicha_hrs

2020/04/07 04:56

質問は編集できるので、修正したコードやログは質問の編集という形でご提示ください。それから、エラーログはNumberFormatExceptionという例外が発生していること、それがMainActivity.javaの41行目で発生していることを示しています。41行目というのは恐らくbmi_result2に値を代入している行だと思いますが、text_BMI_viewのTextViewには数値に変換可能な文字列が表示されているのでしょうか。どういう文字列が表示されているのか第三者にはわかりませんので、ここまで材料が揃っているのならばご自身で今一度精査されてみてはいかがでしょうか。
guest

0

不等号は両側がプリミティブの数値型(int,long,doubleなど)である場合のみ定義されています。bmi_resultはTextView型であるため、不等号での比較対象にはできません。

投稿2020/04/04 07:17

swordone

総合スコア20651

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問