我是否需要使用方法,或者只是在更改时传递操作?

时间:2011-05-06 21:52:31

标签: java methods operation

我是否可以在发生+-*操作时将操作字符串传回,以便将其保存为操作,然后我可以继续当我按=或者这根本不可能?

代码第1部分:

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"); 
        }                      
    }
}

代码第2部分:

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);

2 个答案:

答案 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);
}

}