为何178行加return才能即时显示结果

为什么178行加return才能即时显示结果?
本帖最后由 wyw61 于 2015-10-29 01:10:34 编辑
为什么到后面多个运算符的时候,要多点几次等于号才会出结果呢?

import java.util.ArrayList;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class BasicCaculater extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
ArrayList<String> strList = new ArrayList<String>();
private String numStr = new String();
private int opNbr = 0;
private double result = 0;

JTextField outputField = new JTextField(100);
JButton buttonOne = new JButton("1");
JButton buttonTwo = new JButton("2");
JButton buttonThree = new JButton("3");
JButton buttonFour = new JButton("4");
JButton buttonFive = new JButton("5");
JButton buttonSix = new JButton("6");
JButton buttonSeven = new JButton("7");
JButton buttonEight = new JButton("8");
JButton buttonNine = new JButton("9");
JButton buttonZero = new JButton("0");
JButton buttonPlus = new JButton("+");
JButton buttonMinus = new JButton("-");
JButton buttonMultiply = new JButton("*");
JButton buttonDivided = new JButton("/");
JButton buttonClear = new JButton("CE");
JButton buttonEquals = new JButton("=");

public BasicCaculater(){
setLayout(null);
setTitle("Exaple2-1");
setLocation(100,100);
setSize(450,350);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
outputField.setBounds(20,20,400,50);
outputField.setText("0");
outputField.setEditable(false);
buttonOne.setBounds(20,90,60,30);
buttonTwo.setBounds(85,90,60,30);
buttonThree.setBounds(150,90,60,30);
buttonFour.setBounds(215,90,60,30);
buttonFive.setBounds(280,90,60,30);
buttonSix.setBounds(20,125,60,30);
buttonSeven.setBounds(85,125,60,30);
buttonEight.setBounds(150,125,60,30);
buttonNine.setBounds(215,125,60,30);
buttonZero.setBounds(280,125,60,30);
buttonPlus.setBounds(20,160,60,30);
buttonMinus.setBounds(85,160,60,30);
buttonMultiply.setBounds(150,160,60,30);
buttonDivided.setBounds(215,160,60,30);
buttonEquals.setBounds(280,160,60,30);
buttonClear.setBounds(345,160,60,30);

add(outputField);add(buttonOne);add(buttonTwo);add(buttonThree);add(buttonFour);
add(buttonFive);add(buttonSix);add(buttonSeven);add(buttonEight);add(buttonNine);
add(buttonZero);add(buttonPlus);add(buttonMinus);add(buttonMultiply);add(buttonDivided);
add(buttonEquals);add(buttonEquals);add(buttonClear);
buttonOne.addActionListener(this);
buttonTwo.addActionListener(this);
buttonThree.addActionListener(this);
buttonFour.addActionListener(this);
buttonFive.addActionListener(this);
buttonSix.addActionListener(this);
buttonSeven.addActionListener(this);
buttonEight.addActionListener(this);
buttonNine.addActionListener(this);
buttonZero.addActionListener(this);
buttonPlus.addActionListener(this);
buttonMinus.addActionListener(this);
buttonMultiply.addActionListener(this);
buttonDivided.addActionListener(this);
buttonEquals.addActionListener(this);
buttonClear.addActionListener(this);
}

public void actionPerformed(ActionEvent e){
if(e.getSource()==buttonOne||e.getSource()==buttonTwo||e.getSource()==buttonThree
||e.getSource()==buttonFour||e.getSource()==buttonFive||e.getSource()==buttonSix
||e.getSource()==buttonSeven||e.getSource()==buttonEight||e.getSource()==buttonNine
||e.getSource()==buttonZero){

numStr += e.getActionCommand();

}else if(e.getSource()==buttonPlus||e.getSource()==buttonMinus||e.getSource()==buttonMultiply
||e.getSource()==buttonDivided||e.getSource()==buttonEquals){
strList.add(numStr);
numStr = e.getActionCommand();
strList.add(numStr);
numStr = "";
++opNbr;
System.out.println(strList);
outputField.setText(startCaculation());
}else if(e.getSource()==buttonClear){
strList.clear();
numStr = "";
outputField.setText("0");
}
}
protected String startCaculation(){
String toDisplayStr = new String();
switch(opNbr){
case 1:
if(strList.get(strList.size()-1)=="="){
opNbr=0;
numStr=strList.get(0);
toDisplayStr = strList.get(0);
strList.clear();
break;
}
for(int i=0; i<strList.size();i++)
toDisplayStr += strList.get(i);
break;
case 2:
if(strList.get(strList.size()-1)=="="){
if(strList.get(1)=="+")
result = Double.parseDouble(strList.get(0)) + Double.parseDouble(strList.get(2));
else if(strList.get(1)=="-")
result = Double.parseDouble(strList.get(0)) - Double.parseDouble(strList.get(2));
else if(strList.get(1)=="*")
result = Double.parseDouble(strList.get(0)) * Double.parseDouble(strList.get(2));
else if(strList.get(1)=="/")
result = Double.parseDouble(strList.get(0)) / Double.parseDouble(strList.get(2));
strList.set(0,String.valueOf(result));
opNbr=0;
numStr = strList.get(0);
toDisplayStr += strList.get(0);
strList.clear();
break;
}
else if(strList.get(3)=="-"||strList.get(3)=="+"){
if(strList.get(1)=="+")
result = Double.parseDouble(strList.get(0)) + Double.parseDouble(strList.get(2));
else if(strList.get(1)=="-")
result = Double.parseDouble(strList.get(0)) - Double.parseDouble(strList.get(2));
else if(strList.get(1)=="*")
result = Double.parseDouble(strList.get(0)) * Double.parseDouble(strList.get(2));
else if(strList.get(1)=="/")
result = Double.parseDouble(strList.get(0)) / Double.parseDouble(strList.get(2));
}
else if(strList.get(3)=="*"||strList.get(3)=="/"){
if(strList.get(1)=="*")
result = Double.parseDouble(strList.get(0)) * Double.parseDouble(strList.get(2));
else if(strList.get(1)=="/")
result = Double.parseDouble(strList.get(0)) / Double.parseDouble(strList.get(2));
else if(strList.get(1)=="+"||strList.get(1)=="-"){
for(int i=0; i<strList.size();i++){
toDisplayStr += strList.get(i);
}
break;
}

}
strList.set(0,String.valueOf(result));
strList.set(1,strList.get(3));
strList.remove(2);
strList.remove(strList.size()-1);
--opNbr;
startCaculation();
for(int i=0; i<strList.size();i++)
toDisplayStr += strList.get(i);
break;
case 3:
if(strList.get(3)=="*"){
result = Double.parseDouble(strList.get(2)) * Double.parseDouble(strList.get(4));
}
else if(strList.get(3)=="/")
result = Double.parseDouble(strList.get(2)) / Double.parseDouble(strList.get(4));
strList.set(2,String.valueOf(result));
strList.set(3,strList.get(5));
strList.remove(4);
strList.remove(strList.size()-1);
opNbr=2;
startCaculation();
}
return toDisplayStr;
}
public static void main(String[] args){
BasicCaculater caculater = new BasicCaculater();
caculater.setVisible(true);
}
}

------解决思路----------------------
不去使用获得的返回值
startCaculation();
这用法比较奇怪
------解决思路----------------------
方法前面不是用的String 修饰,不加return咋么通过编译?