2017-05-23 14 views
0

私はハッシュテーブル内で衝突を記録して表示するプログラムを持っています。私は衝突を記録しました。どのデータが衝突したのか、どこにあるのか、どこにあるのかを記録しました。ペイントコンポーネントのJAVA無限ループ?

問題はpaintcomponentが無限ループに詰まっているようです。私はwhileループのどの部分か分かりません。

whileループを削除しようとしましたが、コンパイル時にエラーが発生します。 私はまた、ifステートメント内でリターンを入れようとしましたが、それはクラッシュのx量のうち1つの値しか与えません。

は、ここに私のコードです:

 public void paintComponent (Graphics g) { 
     int xpos = 20, ypos = 30; 
     crash = 0; 

     g.setFont(plainfont); 

     g.drawString("Hash Crash count is: " + crash, xpos, ypos); 
     while(hashtable != null){ 
      for (String name : names) { 
       int start = hashtable.hashFunc3(name);  //locates where data must be 
       int end = hashtable.locateCrash(name);  //locates where data is found 
       if (start != end) { 
        ypos += 20; 
        crash++; 
        g.drawString("Hash Crash:", xpos, ypos); 
        g.drawString(name, 100, ypos); 
        g.drawString("should be at", 200, ypos); 
        g.drawString(Integer.toString(start), 300, ypos); 
        g.drawString("found at", 350, ypos); 
        g.drawString(Integer.toString(end), 400, ypos); 
        //return; 
       } 
      } 
     } 
    } 

あなたの助けと入力は大歓迎です!

+0

「ハッシュテーブル」をヌル値に設定するものは何ですか? –

+0

どのクラスタイプが 'hashtable'変数であり、この条件が' while(hashtable!= null) 'に合致するか?示されたコードから、実際にどこにエラーがあるのか​​を言うことは不可能です。 – MaxZoom

+0

'while'ではなく' if(hashtable!= null) 'です。明らかにハッシュテーブルは後で作成されます。 –

答えて

0

HashMapnullに設定されているエスケープケースはありません。ループを解除するには、if(start == end) hashtable = null;のようなものが必要です。

0

回答が見つかりました。多分最高ではないかもしれませんが... ...

public void paintComponent (Graphics g) { 
    int xpos = 20, ypos = 30; 
    crash = 0; 

    g.setFont(plainfont); 

    g.drawString("Hash Crash count is: " + crash, xpos, ypos); 
    while(hashtable != null){ 
     for (String name : names) { 
      int start = hashtable.hashFunc3(name);  //locates where data must be 
      int end = hashtable.locateCrash(name);  //locates where data is found 
      if (start != end) { 
       ypos += 20; 
       crash++; 
       g.drawString("Hash Crash:", xpos, ypos); 
       g.drawString(name, 100, ypos); 
       g.drawString("should be at", 200, ypos); 
       g.drawString(Integer.toString(start), 300, ypos); 
       g.drawString("found at", 350, ypos); 
       g.drawString(Integer.toString(end), 400, ypos); 
      } 
     } 
     break; //<-- needed a break; after for loop. 
    } 
} 
+0

"breakが必要; after forループ。"その後、ループは必要ありませんでした。 'if(ハッシュテーブル!= null)' –