面试碰见
Scanner scanner=new Scanner(System.in);
StringBuffer buf=new StringBuffer();
buf.append(scanner.next());
String string=buf.toString();
StringBuffer buff=new StringBuffer();
for (int i = 0; i < string.length(); i++) {
//因为string.split("")会把两位数以上的数拆分成个位数,所以采取人工隔离的方法拆分字符串
if ('+'==(string.charAt(i))||'-'==(string.charAt(i))||'*'==(string.charAt(i))||
'/'==(string.charAt(i))) {
buff.append(","+string.charAt(i)+",");
}else {
buff.append(string.charAt(i));
}
}
List<Float> numlist=new ArrayList<Float>();
List<Character> charlist=new ArrayList<Character>();
List<String> list=new ArrayList<String>();
String[] strings=buff.toString().split(",");
for (String string2 : strings) {
list.add(string2);
}
Iterator<String> it=list.iterator();
int i=0;
char operator='0';
while (it.hasNext()) {
String str=it.next();
//如果本次迭代的是数字,则判断运算符里是否有*/?有则做运算,没有则存入numlist;
if (!"+".equals(str)&&!"-".equals(str)&&!"*".equals(str)&&!"/".equals(str)) {
switch (operator) {
case '*':
numlist.set(i-1,numlist.get(i-1)*Float.valueOf(str));
operator='0';
break;
case '/':
numlist.set(i-1,numlist.get(i-1)/Float.valueOf(str));
operator='0';
break;
default:numlist.add(Float.valueOf(str));
i++;
break;
}
}else if ("+".equals(str)||"-".equals(str)) {
charlist.add(str.charAt(0));
}else if ("/".equals(str)) {
operator=str.charAt(0);
}else {
operator=str.charAt(0);
}
}
int c=0;
Iterator<Character> it2=charlist.iterator();
while (it2.hasNext()) {
switch (it2.next()) {
case '+':numlist.set(c, numlist.get(c)+numlist.get(c+1));
numlist.remove(c+1);
break;
default:numlist.set(c, numlist.get(c)-numlist.get(c+1));
numlist.remove(c+1);
break;
}
}
System.out.println(numlist.get(0));
因为看到别人是用stack实现的,所以试试其他方法。当然可以把每个功能拆分成一个类,这样在有括号的时候就方便反复调用其中的一些方法。---第一次发帖