java 实现简单计算器算法



import java.util.Vector;


public class Test {


static String str1 = "1+2*3-4/2+5*6*7-8+9*10";
static int value = 0;
static Vector dataVector = null;
static Vector opVector = null;

public static void main(String args[])
{
splitStr();
printVector();
value = doCalc();
System.out.println("");
System.out.println("value = " + value);
}

public static void splitStr()
{
dataVector = new Vector();
opVector = new Vector();

int strLen = str1.length();
int beginIdx = 0;
int endIdx = 0;
int length = 1;
char c1 = ';';
while (beginIdx < strLen)

{

length = 1;

endIdx = beginIdx + 1;
c1 = str1.charAt(beginIdx);
if (c1 == '+'
|| c1 == '-'
|| c1 == '*'
|| c1 == '/')
{
opVector.addElement(str1.substring(beginIdx, endIdx));
beginIdx += length;
}
else 
{
if (endIdx <= (strLen - 1))
{
while (str1.charAt(endIdx) != '+'
&& str1.charAt(endIdx) != '-'
&& str1.charAt(endIdx) != '*'
&& str1.charAt(endIdx) != '/')
{
endIdx++;
length++;
if (endIdx >= strLen)
break;
}
dataVector.addElement(str1.substring(beginIdx, endIdx));
beginIdx += length;
}
else
{
dataVector.addElement(str1.substring(beginIdx, endIdx));
beginIdx += length;
}
}
}
}

public static void printVector()
{
int len = dataVector.size();
int i = 0;
for (; i< len; ++i)
{
if (0 == i)
System.out.print(" " + dataVector.get(i));
else
System.out.print(", " + dataVector.get(i));
}

System.out.println("");
len = opVector.size();
i = 0;
for (; i< len; ++i)
{
if (0 == i)
System.out.print(" " + opVector.get(i));
else
System.out.print(", " + opVector.get(i));
}
}

public static int doCalc()
{
int multiDivOpCnt = 0;
for (int i = 0; i < opVector.size(); ++i)
{
char op = opVector.get(i).toString().charAt(0);
if (op == '*' || op == '/')
multiDivOpCnt++;
}

int opIdx = 0;
char op = ';';
int tmpData = 0;
int opSize = opVector.size();
while (opSize > 0)
{
op = opVector.get(opIdx).toString().charAt(0);
if (multiDivOpCnt > 0)
{
if (op == '*')
{
tmpData = Integer.parseInt(dataVector.get(opIdx).toString()) * Integer.parseInt(dataVector.get(opIdx + 1).toString());
opVector.remove(opIdx);
multiDivOpCnt--;
dataVector.remove(opIdx + 1);
dataVector.remove(opIdx);
dataVector.insertElementAt(String.valueOf(tmpData), opIdx);
opSize = opVector.size();
}
else if (op == '/')
{
tmpData = Integer.parseInt(dataVector.get(opIdx).toString()) / Integer.parseInt(dataVector.get(opIdx + 1).toString()); 
opVector.remove(opIdx);
multiDivOpCnt--;
dataVector.remove(opIdx + 1);
dataVector.remove(opIdx);
dataVector.insertElementAt(String.valueOf(tmpData), opIdx);
opSize = opVector.size();
}
else
{
opIdx++;
}
}
else 
{
opIdx = 0;
if (op == '+')
{
tmpData = Integer.parseInt(dataVector.get(opIdx).toString()) + Integer.parseInt(dataVector.get(opIdx + 1).toString());
opVector.remove(opIdx);
dataVector.remove(opIdx + 1);
dataVector.remove(opIdx);
dataVector.insertElementAt(String.valueOf(tmpData), opIdx);
opSize = opVector.size();
}
else if (op == '-')
{
tmpData = Integer.parseInt(dataVector.get(opIdx).toString()) - Integer.parseInt(dataVector.get(opIdx + 1).toString()); 
opVector.remove(opIdx);
dataVector.remove(opIdx + 1);
dataVector.remove(opIdx);
dataVector.insertElementAt(String.valueOf(tmpData), opIdx);
opSize = opVector.size();
}
}

if (0 == multiDivOpCnt)
opIdx = 0;
}

return Integer.parseInt(dataVector.get(0).toString());
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值