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

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

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

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

Android Studio

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

Q&A

解決済

2回答

6063閲覧

オーバーフロー発生時の対処方法について《Java,Android Studio》

se_hatena2525

総合スコア3

Java

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

Android Studio

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

0グッド

0クリップ

投稿2020/05/27 06:28

編集2020/05/27 06:31

状況説明
現在、Android Studioにてjavaを使用して電卓のアプリを作成しています。

いま実現したいこと
足し算演算で電卓に2147483647+1と入力したら結果表示のエディットテキストボックスの中に”エラー”と表示させたいです。

試したこと・困っていること
If文やtry catch構文を利用して計算結果がInteger.MAX_VALUEを超えたらエラーを表示というコードを書いたのですが、2147483647+1の結果が-2147483648になってしまいます。

実際のコード

__イコールボタンを押した時の処理__ buttonEqual.setOnClickListner(new View.OnClicckListner(){ @Override public void onClick(View V){ //__X+YがあったとしたらYに該当するものでテキストボックスの文字列の数字をint型の数字に変換__ Value2= Integer.parseInt(tv1.getText().toString()); //__演算 電卓で押された数字の足し算__ Int Add= Value1 + Value2; //__if(pushedBtn=0)は足し算ボタンが押された時に記録。足し算とイコールボタンが押された場合の処理__ if(pushedBtn==0){ try{ //最大値よりでかかった場合 if(Add>Integer.MAX_VALUE){ //最小値より小さかった場合 }else if(Add<Integer.MIN_VALUE){ //例外のときの処理 }}catch (Exception e){ //エディットボックスに上記の条件の場合のときエラーと表示 ed1.setText(“error”); }finally{ //必ず行う処理 エディットボックスに足し算の結果を表示 ed1.setText(String.valueof(Add)); } }

なにかアドバイスや原因など分かる方がいましたら、教えてください。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

Java8が使えるなら、という前提付きですが、Math.addExactというメソッドがあります。
オーバーフロー時に例外を発してくれます。

投稿2020/05/27 06:47

swordone

総合スコア20651

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

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

se_hatena2525

2020/05/27 07:25

そのような方法もあるのですね、既にlong型で最大値と最小値の値を自分で設定し、それを超えたらエラー表示するやり方で解決しましたが、以後参考にさせていただきます。ありがとうございます。
guest

0

ベストアンサー

2147483647+1の結果が-2147483648になってしまいます。

残念ながら、そういう仕様です(JPCERT/CC)。整数型の演算は、オーバーフロー・アンダーフローしても例外になりません

投稿2020/05/27 06:31

maisumakun

総合スコア145183

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

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

maisumakun

2020/05/27 06:31

そもそも、「整数しか扱えない電卓」というのも不便なので、浮動小数点数で処理できるように変えたほうがいいかと思います。
se_hatena2525

2020/05/27 06:33

ありがとうございます。整数のみで現在使用したいため整数にあえてしてます。
maisumakun

2020/05/27 06:33

整数型で処理したい場合、上のJPCERT/CCの記事の中に対応法として「事前に範囲をチェックする」「大きな型で演算する」「BigIntegerを使う」の3つが挙げられています。
se_hatena2525

2020/05/27 06:36

そもそも不可能なことを配置を変えたり、条件を変更したり無駄なことをしてました。教えていただきありがとうございます。参考にしてやってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問