Javaのeval関数処理
はじめまして、こんばんわ。
いつも利用させて頂いております。
現在、Javaの課題を出されており、InputStreamを使って、1行の四則計算のプログラムを作成しております。
もうすこしで成功!!っというところで、減算の処理がDoubleでキャストしたときに例外として処理されてしまうため、非常に困っております。
もしよろしければどなたかご教授おねがいします。
protected String startCalc(String numerical)
{
// 初期値を設定
double addVal = 0;
double minusVal = 0;
while (true)
{
String val;
// 加算演算子の位置を検索
int addPosition = numerical.indexOf("+");
if (addPosition < 0)
{
val = numerical;
}
else
{
// 加算の演算子の前の式
val = numerical.substring(0, addPosition);
}
// 乗算、除算の計算を行う
addVal += procCalc(val);
if (addPosition < 0)
{
break;
}
else
{
// 加算の演算子の後の式
numerical = numerical.substring(addPosition + 1);
}
}
return new DecimalFormat("0").format(addVal + minusVal);
}
private double procCalc(String numerical)
{
// 乗算、除算の初期値を設定
double valNum = 1;
while (true)
{
String mNum = "";
// 乗算の演算子の位置を取得
int multiPosition = numerical.indexOf("*");
if (multiPosition < 0)
{
mNum = numerical;
}
else
{
// 乗算の前の式を抜き取る
mNum = numerical.substring(0, multiPosition);
}
int kai = 0;
double value = 1;
while (true)
{
String dNum = "";
int dPosition = mNum.indexOf("/");
// "/"がない場合
if (dPosition < 0)
{
dNum = mNum;
}
else
{
// 最初の / より前の項
dNum = mNum.substring(0, dPosition);
}
// 最初の計算の場合
if (kai == 0)
{
value = Double.parseDouble(dNum);// TODO マイナスの場合、ここで例外
}
else
{
value /= Double.parseDouble(dNum);
}
// "/"がない場合
if (dPosition < 0)
{
break;
}
else
{
kai++;
// 最初の / より以降の項
mNum = mNum.substring(dPosition + 1);
}
}
valNum *= value;
// "*"がない場合
if (multiPosition < 0)
{
break;
}
else
{
// 乗算の演算子の位置を取得
numerical = numerical.substring(multiPosition + 1);
}
}
return valNum;
}
}
No.3ベストアンサー
- 回答日時:
#1です。
言い方がまずかったかな?演算子「 - 」の処理が何処にも書いてないのではないでしょうか?
たとえば、減算演算子の位置を検索している部分はどこでしょうか。
>dNumの値を表示というとコンソール上に数値を表示させる?という意味でしょうか。
ええ、コンソールに表示しても構いません、要するにdNumの値がわかればいいのです。
#「String dNum = "";」と定義してあるから文字列ですけども・・
>確かに2-2が入ってきます。がしかし、その例外部分で減算処理をしてしまうと、
そりゃ、減算処理をやる位置がまずいのです。
加算演算子(+記号)の前後で分割して、前+後を計算しているのに、
減算演算子(-記号)の前後で分割して、前-後を計算していないから、
乗除算のルーチンで例外が発生しているのです。
No.2
- 回答日時:
たとえば 2-2 を入力すると例外が送出されますが、
このときの Double.parseDouble(dNum); の dNum には
"2-2" が入ってませんか?
減算の処理ができてないように見えるんですけど。
この回答への補足
確かに2-2が入ってきます。がしかし、その例外部分で減算処理をしてしまうと、
3 + 5 - 1 * 9とかの計算でおかしな答えが算出されてしまいます。
No.1
- 回答日時:
double minusVal = 0;
に計算結果が設定されていないのではありませんか?
>value = Double.parseDouble(dNum); // TODO マイナスの場合、ここで例外
のところで、dNumの値を表示してみればいかがでしょうか。
この回答への補足
ご回答ありがとうございます。
>value = Double.parseDouble(dNum); // TODO マイナスの場合、ここで例外
のところで、dNumの値を表示してみればいかがでしょうか。
>double minusVal = 0;に計算結果が設定されていないのではありませんか?
処理的にまだ完成していない為、この変数はまだ使用していません
>value = Double.parseDouble(dNum); // TODO マイナスの場合、ここで例外
のところで、dNumの値を表示してみればいかがでしょうか。
dNumの値を表示というとコンソール上に数値を表示させる?という意味でしょうか。
ちなみにvalue = Double.parseDouble(dNum)部分に、NumberformatExceptionを追加して減算処理を追加すると、計算の順序がずれてしまいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) エクセルで、1つのセルで上書き足し算して セルの範囲を指定できますか? パソコン初心者です。 お時間 3 2023/07/05 06:13
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- Ruby vscode 文字化け 1 2022/05/21 19:17
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
double型の足し算について
-
実数からの小数部の取得
-
最大値を求めるプログラム
-
Javaで何パーセント%かを表示...
-
double型変数値の整数部分のみ...
-
0dの意味を教えてください
-
C言語のポインターに関する警告
-
ループ処理の際、最後だけ","を...
-
変数を動的に利用するには?
-
javaで質問です。 文字列2023/2...
-
Java配列でNullPointerExceptio...
-
IF関数でEmpty値を設定する方法。
-
ダブルクォーテーションのrepla...
-
flush()とclose()について
-
カタカナをローマジに変換する。
-
JSPやサーブレットでSystem.out...
-
Path型をString型へ変換する(Java)
-
VBAで配列の計算
-
[JAVA]try 内の変数を外で!?
-
パソコンキーボードで時分秒を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0dの意味を教えてください
-
べき乗
-
Javaで何パーセント%かを表示...
-
実数からの小数部の取得
-
double型変数値の整数部分のみ...
-
doubleとintの違い
-
double型の足し算について
-
最大値と最小値の求め方
-
少数50桁以上を表示するには
-
自然対数の底Eを含むStringの数...
-
Java言語プログラミングについ...
-
Javaプログラムのフローチャー...
-
モンテカルロ法を用いた球の体...
-
printfでのエラーがわからない...
-
double型で収まりきれない小数...
-
Javaで計算
-
JAVAのプログラムで、2乗計算...
-
フラクタルで雲を作る。
-
doubleで入力するには?
-
プログラムのおかしいところを...
おすすめ情報