0

誰かがここで何が起こっているのか説明してもらえますか? 「静的コンテキストから参照できない非静的変数」はなぜですか。このコードに表示されますか?parseBinary を非静的に変更しようとしました。BinaryFormatException クラスを静的に変更しようとしました... (許可されていません)。このエラーに対する私の理解は非常に弱いです。私は通常、いくつかの静的な言葉と公共の言葉を入れ替えて、正しく機能させることができることを知っています. これでそのような運はありません。これは宿題の質問です...しかし、その作業はエラーを中心に展開しません。これは、バイナリ文字列が正しく形成されていない場合にスローされるカスタム例外クラスの作成に関係しています。したがって、私の質問は問題の解決に役立ちますが、答えは得られません。

public class binaryToDecimal {

    public static void main(String[] args) {
        try {
            System.out.println(parseBinary("10001"));
            System.out.println(parseBinary("101111111"));
        } catch (BinaryFormatException ex) {
            ex.getMessage();
        }
    }

    public static int parseBinary(String binaryString)
            throws BinaryFormatException {
        int value = 0;

        for (int i = 0; i < binaryString.length(); i++) {
            char ch = binaryString.charAt(i);

            if (ch != '0' && ch != '1') {
                throw new BinaryFormatException(String message);
                value = 0;
            } else
                value = value * 2 + binaryString.charAt(i) - '0';
        }

        return value;
    }

    class BinaryFormatException extends Exception {
        public BinaryFormatException(String message) {
            super(message);
        }
    }
}
4

3 に答える 3

4

BinaryFormatExceptionpublic class の内部クラスとして定義したようですbinaryToDecimal。つまり、 のインスタンスbinaryToDecimalを持つには のインスタンスが必要ですBinaryFormatException。ただし、メソッドのstaticコンテキストにいますparseBinary。のインスタンスはありませんbinaryToDecimal

次の 2 つの選択肢があります。

  1. BinaryFormatExceptionクラスを宣言しstaticます。
  2. BinaryFormatExceptionクラス コードをクラスの外に移動しbinaryToDecimalます。
于 2013-09-07T00:10:49.320 に答える
2

BinaryFormatException は BinaryToDecimal の内部クラスであるため、作成するには外部インスタンスが必要です。ただし、parseBinary は静的メソッドであり、クラスのインスタンスなしで実行されます。

これを修正するには、「class BinaryFormat Exception」の前に「static」という単語を入れてください。

于 2013-09-07T00:13:08.647 に答える