我不知道如何重建这个简单的计算器-我必须使用invoke方法而不是switch。具体操作人员有动态运行的合适方法。你有什么建议吗?提前感谢!
import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
public class TokenTest extends JFrame
{
private JLabel prompt;
private JTextField input;
private JLabel result;
public TokenTest()
{
super( "Testing Class StringTokenizer" );
Container c = getContentPane();
c.setLayout( new FlowLayout() );
prompt = new JLabel( "Enter number1 operator number2 and press Enter" );
c.add( prompt );
input = new JTextField( 10 );
input.addActionListener( new ActionListener()
{
public void actionPerformed( ActionEvent e )
{
String stringToTokenize = e.getActionCommand();
StringTokenizer tokens = new StringTokenizer( stringToTokenize );
double res;
double num1 = Integer.parseInt(tokens.nextToken());
String sop = tokens.nextToken();
double num2 = Integer.parseInt(tokens.nextToken());
switch (sop.charAt(0)) {
case '+' : res = num1 + num2; break;
case '-' : res = num1 - num2; break;
case '*' : res = num1 * num2; break;
case '/' : res = num1 / num2; break;
default : throw new IllegalArgumentException();
}
result.setText(String.valueOf(res));
}
});
c.add( input );
result = new JLabel("");
c.add(result);
setSize( 375, 160 );
show();
}
public static void main( String args[] )
{
TokenTest app = new TokenTest();
app.addWindowListener( new WindowAdapter()
{
public void windowClosing( WindowEvent e )
{
System.exit( 0 );
}
});
}
}
如果您不允许使用switch或有其他原因不允许使用它,您可以使用map代替。
Map<Character, Command> map = new HashMap<>();
map.put('+', sumCommand);
map.put('-', subCommand);
map.put('*', multCommand);
map.put('/', divCommand);
那么你可以简单地执行:
Command r = map.get(sop.charAt(0));
if (r != null) {
r.execute(num1, num2);
} else {
throw new IllegalArgumentException(); // I'd recommend using assertions here, like assert n != null.
}
Command
接口和它的一个实现看起来是这样的。
public interface Command {
double execute(double num1, double num2);
}
public class SumCommand implements Command {
public double execute(double num1, double num2) {
return num1 + num2;
}
}
但是,可以肯定的是,使用switch的原始解决方案更容易且更具可读性。