0

ここで少し問題があります。おそらく、tryとcatchの使い方がわからないためです。

私の方法は少し長いですが、問題は単純だと思います。input1 input2およびinput3に対して変数が初期化されないという問題があります-この変数が定義されていない場合にエラーを返すプログラムが必要であり、nullこのエラーを見つけることができないため、初期化できません。

どうやって進める?

public void print() {
    boolean input1;
    boolean input2;
    boolean input3;
    String gate;
    boolean calc;

    for (String a : operations.keySet()) {
        if (Gate2.contains(operations.get(a).Gate)) {
            if (inputs.containsKey(operations.get(a).input1)) {
                input1 = inputs.get(operations.get(a).input1);
            }
            if (inputs.containsKey(operations.get(a).input2)) {
                input2 = inputs.get(operations.get(a).input2);
            }
            if (result.containsKey(operations.get(a).input1)) {
                input1 = result.get(operations.get(a).input1);
            }
            if (result.containsKey(operations.get(a).input2)) {
                input2 = result.get(operations.get(a).input2);
            }
            gate = operations.get(a).Gate;
            calc = cc.calc(input1, input2, gate);
            result.put(a, calc);

        }else if (Gate3.contains(operations.get(a).Gate)) {
            if (inputs.containsKey(operations.get(a).input1)) {
                input1 = inputs.get(operations.get(a).input1);
            }
            if (inputs.containsKey(operations.get(a).input2)) {
                input2 = inputs.get(operations.get(a).input2);
            }
            if (inputs.containsKey(operations.get(a).input3)) {
                input3 = inputs.get(operations.get(a).input3);
            }
            if (result.containsKey(operations.get(a).input1)) {
                input1 = result.get(operations.get(a).input1);
            }
            if (result.containsKey(operations.get(a).input2)) {
                input2 = result.get(operations.get(a).input2);
            }
            if (result.containsKey(operations.get(a).input3)) {
                input3 = result.get(operations.get(a).input3);
            }
            gate = operations.get(a).Gate;
            calc = cc.calc(input1,input2,input3, gate);
            result.put(a, calc);

        }else if ("not".equals(operations.get(a).Gate)) {
            if (inputs.containsKey(operations.get(a).input1)) {
                input1 = inputs.get(operations.get(a).input1);
            }

            if (result.containsKey(operations.get(a).input1)) {
                input1 = result.get(operations.get(a).input1);
            }

            gate = operations.get(a).Gate;
            calc = cc.calc(input1, gate);
            result.put(a, calc);
        }

    }

    System.out.format(" Inputs --> ");
    for (String a : inputs.keySet()) {

        int bit2 = inputs.get(a) ? 1 : 0;
        System.out.format("%5s", bit2);
    }
    System.out.format(" Results --> ");
    for (String a : result.keySet()) {

        int bit2 = result.get(a) ? 1 : 0;
        System.out.format("%3s", bit2);
    }
    System.out.format("\n");

}
4

4 に答える 4

6

プリミティブブール値を使用しているため、true または false に初期化する必要があります。代わりにラッパーjava.lang.Booleanを使用できます。

于 2012-12-04T10:10:54.223 に答える
2

それを拡張すると、ブール値は事実上、true、false、または null の 3 つの状態になります。だからあなたは置くことができます

Boolean input1 = null;
...
if (input1 == null) ...
于 2012-12-04T10:23:29.160 に答える
0

ローカル変数の場合は、使用する前に初期化する必要がありますが、クラス/インスタンス変数の場合は、暗黙的にデフォルト値に初期化されます(オブジェクトの場合はnull)。

于 2012-12-04T10:26:27.163 に答える
0

true/false/null を持つことができる Boolean クラスを使用するか、別の変数を使用して初期化されているかどうかを示します。変数を初期化したら、false に初期化し、別の変数 isInit を追加して、false に初期化することもできます。変数スイッチ isInit を初期化します。 true に設定すると、isInit を使用して初期化されているかどうかを確認できます

于 2012-12-04T10:31:31.123 に答える