Javaのeval関数処理
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;
}
}