-1
私のコードでは、キーと値としてHashMapに格納する2つの値のキューを持つ必要があります。私はキューにマップを入れたとき、しかし、私はこの例外を取得:ここなぜ私は2つのハッシュマップを比較できない
Exception in thread "main" java.lang.ClassCastException: java.util.HashMap cannot be cast to java.lang.Comparable
at java.util.PriorityQueue.siftUpComparable(Unknown Source)
at java.util.PriorityQueue.siftUp(Unknown Source)
at java.util.PriorityQueue.offer(Unknown Source)
at java.util.PriorityQueue.add(Unknown Source)
at com.n2s.StringsPractise.Prime.primeCheck(Prime.java:32)
at com.n2s.StringsPractise.Randomizer.main(Randomizer.java:22)
は私のコードが何をするかの説明をし、コードそのものです:
ランダマイザの仕事は、一連のを生成することです正の乱数を生成し、整数の分散キューを介してPrimeに送ります。 Primesジョブは、整数を受信し、整数が素数かどうかを計算し、元の数とブール値を含む分散キュー(Javaキュー実装のみ、JMS実装は不要)を介してRandomizerに返答します。 ; Randomizerはシステムに出力します。
ランダマイザクラス:
public class Randomizer{
static Queue<Integer> q = new PriorityQueue<Integer>();
public static Queue<Integer> randomGenerate(){
int num = 0;
Random rand = new Random();
for(int k = 0; k < 10; k++){
num = rand.nextInt(Integer.MAX_VALUE);
q.add(num);
num = 0;
}
return q;
}
public static void main(String[] args){
Queue<HashMap<Integer, String>> outQ = Prime.primeCheck(randomGenerate());
System.out.println(outQ);}
}
}
首相クラス:
public class Prime{
Randomizer rn = new Randomizer();
static HashMap<Integer, String> map = new HashMap<Integer, String>();
static Queue<HashMap<Integer, String>> primeQ = new PriorityQueue<HashMap<Integer, String>>();
public static Queue<HashMap<Integer, String>> primeCheck(Queue<Integer> q){
boolean flag = false;
Iterator<Integer> itr = q.iterator();
while(itr.hasNext()){
int item = (int) itr.next();
int srt = (int) Math.sqrt((double) item);
if (item==1) {
flag = true;
} else{
for(int i=2;i<=srt;i++){
if(item % i == 0) flag = false;
}
flag = true;
}
if(flag == true)
map.put(item, "Prime");
else map.put(item, "Not Prime");
primeQ.add(map);
}
return primeQ;
}
}
HashMapのは、Comparableインタフェースを実装していないので、それがComparableを –
にキャストすることはできませんが、でも同等とのcompareTo(実装後に解決することはできません)に –
あなたは論理エラーを持っている:何かがない場合にはプライム、あなたset flag = false、直後にflag = trueを設定します。 –