2016-07-29 7 views
0

Javaに堪能ではありません。しかし、自分自身の使用のために他の人の仕事を更新する必要性が生じました(もちろん、個人的には、もちろん)。プラグインのアップデートが始まったら(これは特にSpigot Minecraftサーバーのためです)、私は大量のコードと多くのエラーが発生しました。これは、Javaのシーンに初心者として私を困らせました。古いコードを更新しましたが、前方宣言エラーが発生しました

コードはBase64デコーダ用です。スロー

private static final char[] map1 = new char[64]; 

static { int i = 0; 
    for (char c = 'A'; c <= 'Z'; c = (char)(c + '\001')) map1[(i++)] = c; 
    for (char c = 'a'; c <= 'z'; c = (char)(c + '\001')) map1[(i++)] = c; 
    for (char c = '0'; c <= '9'; c = (char)(c + '\001')) map1[(i++)] = c; 
    map1[(i++)] = '+';map1[(i++)] = '/'; 

    map2 = new byte['<nonunicodechar>']; // It appears as a square in IntelliJ, assuming it's not unicode (see below) 

    for (int i = 0; i < map2.length; i++) map2[i] = -1; 
    for (int i = 0; i < 64; i++) { map2[map1[i]] = ((byte)i); 
    } 
} 

public static final byte[] map2; 

問題がMAP2は違法前方参照され、その「i」はすでにスコープで定義されていることです。

私が正しくリコール

Code

+0

あなたのQは正確ではありませんが、(1) 'C++'や 'c + = 1'はあなたのために' char'へのキャストを扱います(2)表示されないJava-charの代りに多くのものがありますが、_probably_ '(char)127' aka' \ u007F'だと思います。あなたが使用しているエディタに応じて、基礎となるコードを得ることができるかもしれませんし、Unixyシステムでは、SpigotがOracle Javaを使用している場合、ファイル上で 'od'または' xxd'などを使用します。 8)標準ライブラリにある['java.util.Base64' click doc](https://docs.oracle.com/javase/8/docs/api/java/util/Base64.html)より簡単かもしれません –

+0

@ dave_thompson_085ええ、私は今それが含まれていることに気付きました。このコードを使用している唯一の理由は、別のクラスがこのbase64デコーダに依存しているためです。私は統合されたバージョン(やはりここでは非常に基本的な知識)をどのように実装するのかはわかりません。 – AssassinsKeeper

答えて

1

を次のようにbyte[''];に見える何、このような静的コンストラクタは普通のクラスの初期化の順番に自分自身を挿入します。したがって、あなたの場合、map1が宣言され、静的コードブロックが実行され、mapが宣言されます。

静的コードブロックの上にmap2の宣言を移動してみてください。

+0

これを試して、 'private static final char [] map1 = char [64];'の下に移動しましたが、map2の未知のクラスエラーがスローされるようになりました。私は間違った場所に移動したと思いますか? – AssassinsKeeper

+0

これは正しい場所ではありません...あなたの最初の問題を解決し、別のものを公開したように聞こえます...あなたは未知のクラスエラーの詳細を投稿できますか? また、「i」の問題に気づいたばかりです。あなたは静的ブロックの先頭で宣言していますが、その後、あなたのforループでそれを再び宣言しようとします... forループ変数を "j"またはもっと記述的なものに変更してみてください。 –

+0

申し訳ありませんが、これは返信にかかりました。実際に私がUnixyシステムで編集したとき、その行は 'map2 = new byte [''];'です。それはまた、 "Empty Character Literal"というエラーを投げます。私はそれを私に何かに変更するとき、新しい「私」は決して使用されないと言います。 – AssassinsKeeper

関連する問題