0

+-または操作が発生したときに操作文字列を戻して、*操作として保存し、押したときに移動できるようにすることは可能=ですか、それとも単に不可能ですか?

コードパート 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);
4

2 に答える 2

1

文字列が等しいかどうかをチェックするには、常にequals()メソッドを使用する必要があります。コードの一部を取得すると、次のようになります。

if (flip.equals("-"))
{
    box2.setText(value1);
    box1.setText("");
    operation = "-";
}

null になる可能性がある場合flipは、テストを次のように再配置できます。

if ("-".equals(flip))

Java には最適化があり、リテラル文字列値を再利用します。したがって、このように記述した場合、2 つの変数は同じ物理オブジェクトを指し、==true を返します。

String a = "foo";
String b = "foo";

ただし、GUI から文字列値を読み取っている場合 (そうしているように見えます)、これはリテラル値ではなく、そのように最適化されていません。オブジェクトの等価性をチェックするために常に使用し、プリミティブ値のみに使用するのは良い習慣です。equals()==

于 2011-05-06T22:30:15.023 に答える
0

以下のような操作には、常にストラテジーデザインパターンを使用してください。

//StrategyExampleテストアプリケーション

public class StrategyExample {public static void main(String [] args){コンテキストコンテキスト; //異なる戦略に従う3つのコンテキスト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); }}

//具体的な戦略を実装するクラスはこれを実装する必要があります//コンテキストクラスはこれを使用して具体的な戦略を呼び出しますpublicinterfaceStrategy {int execute(int a、int b); }

//ストラテジーインターフェイスを使用してアルゴリズムを実装しますpublicclassConcreteStrategyAddimplements Strategy {public int execute(int a、int b){System.out.println( "Called ConcreteStrategyA's execute"); a+bを返します。//aとbで足し算をします}}

publicclassConcreteStrategySubtractはStrategyを実装します{publicintexecute(int a、int b){System.out.println( "Called ConcreteStrategyB's execute()"); a-bを返します。//aとbで減算を行います}}

publicclassConcreteStrategyMultiplyはStrategyを実装します{publicintexecute(int a、int b){System.out.println( "Called ConcreteStrategyC's execute()"); a*bを返します。//aとbで乗算を行います}}

// ConcreteStrategyオブジェクトで構成され、Strategyオブジェクトへの参照を維持しますpublic class Context {private Strategystrategy;

// Constructor
public Context(Strategy strategy) {
    this.strategy = strategy;
}

public int executeStrategy(int a, int b) {
    return strategy.execute(a, b);
}

}

于 2011-05-07T03:21:37.120 に答える