0

私は最近 Java でプログラミングを始めました。このコードを作成しました: https://github.com/mouuff/JavaMD5cracker

コードは機能しますが、この厄介な警告が表示されます:

C:\Users\mou\Desktop\JavaMD5cracker-master>javac icrackmd5.java
Note: .\brute.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

コンパイラがこの行 (brute.java : l 26) を安全でないと判断したか、わかりません...

if (tries > (int)pows.get(lenght-1))

誰かがそれで私を助けることができますか?

4

3 に答える 3

2

brute.javaでのハッシュテーブル宣言のためです

Hashtable pows = new Hashtable();

コンパイラがこの行を実行するとき

if (tries > (int)pows.get(lenght-1))

それは、捕虜からの要素のタイプが何であるかを知りません。

ジェネリックを使用してハッシュテーブル宣言を変更する

Hashtable<Integer, Integer> pows = new Hashtable<Integer,Integer>();
于 2012-11-07T14:10:11.767 に答える
1

クラスには次のbruteものが含まれます。

Hashtable pows = new Hashtable();

rawタイプを使用していHashtableます。ここではジェネリックを使用する必要がありました。HashMapまた、従来のコレクションクラスの代わりに使用する必要がありますHashtable

Map<Integer, Integer> = new HashMap<Integer, Integer>();

その場合、キャストは不要になります。

if (tries > pows.get(lenght-1)){

(「長さ」のスペルが間違っていることに注意してください。「長さ」である必要があります)。

その上、メンバー変数はである必要がprivateあり、コードは世界のほとんどで使用されている事実上のコーディング標準に準拠していません(クラス名は大文字で始まり、変数名にはアンダースコアを含めないでください)。

于 2012-11-07T14:12:43.077 に答える
1

int別のオブジェクトでキャスト操作を行っているだけです。pows.get(length-1)コンパイラは、返されるものが実際にに変換できるかどうかをチェックできないため、これはチェックされていない操作ですint

コードを信頼し(つまり、本当に信頼している)、キャストをintいつでも実行できることを知っている場合は、そのようにすることができます。これは単なるコンパイラの警告です。

その間、Mathオブジェクトを見てください。たぶん、あなたが達成しようとしていることを行うための簡単で安全な方法があります。

編集

これを変更する:

Hashtable pows = new Hashtable();

に:

Hashtable<Integer,Integer> pows = new Hashtable<Integer,Integer>();

コンパイラノートを削除します。

于 2012-11-07T14:05:32.763 に答える