我是否可以在发生+
,-
或*
操作时将操作字符串传回,以便将其保存为操作,然后我可以继续当我按=
或者这根本不可能?
public void actionPerformed(ActionEvent calculate)
{
JButton operand = (JButton) calculate.getSource();
String flip = operand.getLabel();
String operation = "";
System.out.println(operation);
String value1 = (box1.getText());
String value2 = (box2.getText());
box1.setText(box1.getText() + operand.getLabel());
if (flip.equals("C"))
{
box2.setText("");
box1.setText("");
}
if (flip.equals("!"))
{
int intValueNeg = Integer.parseInt(value1);
int negateIntValue = intValueNeg * (-1);
String negativeInt = Integer.toString(negateIntValue);
box1.setText(negativeInt);
}
if (flip.equals("+"))
{
box2.setText(value1);
box1.setText("");
operation = operand.getLabel();
}
if (flip.equals("-"))
{
box2.setText(value1);
box1.setText("");
operation = operand.getLabel();
}
if (flip.equals("*"))
{
box2.setText(value1);
box1.setText("");
operation = operand.getLabel();
}
if (flip.equals("=") && operation.equals("+"))
{
int intValue1 = Integer.parseInt(value1);
int intValue2 = Integer.parseInt(value2);
int totalValue = intValue1 + intValue2;
String totalResult = Integer.toString(totalValue);
box1.setText(totalResult);
box2.setText("0");
}
if (flip.equals("=") && operation.equals("-"))
{
int intValue1 = Integer.parseInt(value1);
int intValue2 = Integer.parseInt(value2);
int totalValue = intValue2 - intValue1;
String totalResult = Integer.toString(totalValue);
box1.setText(totalResult);
box2.setText("0");
}
if (flip.equals("=") && operation.equals("*"))
{
int intValue1 = Integer.parseInt(value1);
int intValue2 = Integer.parseInt(value2);
int totalValue = intValue1 * intValue2;
String totalResult = Integer.toString(totalValue);
box1.setText(totalResult);
box2.setText("0");
}
}
}
box2 = new JTextField (10);
b.add(box2);
Blackbelt.add(a, BorderLayout.NORTH);
Blackbelt.add(c, BorderLayout.CENTER);
Blackbelt.add(b, BorderLayout.SOUTH);
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
答案 0 :(得分:1)
要检查字符串是否相等,应始终使用equals()
方法。拿一段你的代码,它看起来像这样:
if (flip.equals("-"))
{
box2.setText(value1);
box1.setText("");
operation = "-";
}
如果flip
可能为null,您可以重新安排测试,如下所示:
if ("-".equals(flip))
Java有一个优化,它重用了文字字符串值。因此,如果你写这样的东西,这两个变量指向同一个物理对象,==
将返回true。
String a = "foo";
String b = "foo";
但是,如果您正在从GUI(它看起来像您正在做)中读取字符串值,则这不是文字值,并且未以这种方式进行优化。 总是使用equals()
来检查对象的相等性,并且只使用==
作为原始值,这是一个好习惯。
答案 1 :(得分:0)
始终将策略设计模式用于以下操作。
// StrategyExample测试应用程序
公共类StrategyExample { public static void main(String [] args){ 上下文背景; //遵循不同策略的三种情境 context = new Context(new ConcreteStrategyAdd()); int resultA = context.executeStrategy(3,4); context = new Context(new ConcreteStrategySubtract()); int resultB = context.executeStrategy(3,4); context = new Context(new ConcreteStrategyMultiply()); int resultC = context.executeStrategy(3,4); } }
//实现具体策略的类应该实现这一点 //上下文类使用它来调用具体策略 公共接口策略{ int execute(int a,int b); }
//使用策略接口实现算法 公共类ConcreteStrategyAdd实现策略{ public int execute(int a,int b){ System.out.println(“被称为ConcreteStrategyA的执行”); 返回a + b; //用a和b做一个加法 } }
公共类ConcreteStrategySubtract实现策略{ public int execute(int a,int b){ System.out.println(“Called ConcreteStrategyB的execute()”); 返回a - b; //用a和b做减法 } }
公共类ConcreteStrategyMultiply实现策略{ public int execute(int a,int b){ System.out.println(“Called ConcreteStrategyC的execute()”); 返回a * b; //用a和b进行乘法运算 } }
//使用ConcreteStrategy对象进行配置,并维护对Strategy对象的引用 公共类Context { 私人战略战略;
// Constructor
public Context(Strategy strategy) {
this.strategy = strategy;
}
public int executeStrategy(int a, int b) {
return strategy.execute(a, b);
}
}