2017-04-23 4 views
1

私はトリビアクラックからインスピレーションを得たプロジェクトを作成しました。Cashは選択されているHashMapから値をランダムに削除します

SporHmapは、3つの値(質問)を格納するHashMapです。 actionListenerメソッドでは、プログラムはハッシュマップからランダムなキーを取得し、QuestionClassのJLabelとJButtonへの質問とその答えを出力します。

ここでの問題は、私は質問を繰り返す必要はありません。質問が表示された場合は、再度表示しないでください。私は使用しましたtl.SporHmap.remove(randomValue);値が選択された後にが変更されましたが、何も変更されませんでした。ここで

TriviaLinked tl = new TriviaLinked(); 
tl.SporHmap.put("Basketbolda 3 adımdan fazla atılan adıma ne denir?","Steps"); 
tl.SporHmap.put("Hindistan'ın ulusal sporu nedir?","Kriket"); 
tl.SporHmap.put("Süper Lig'de hakeme kırmızı kart gösteren futbolcu kimdir?","Salih Dursun"); 

Spor.addActionListener(new ActionListener() { 


    public void actionPerformed(ActionEvent e) { 

     QuestionClass q = new QuestionClass(); 
     q.getQFrame(); 


     Object[] values = tl.SporHmap.values().toArray(); 
     String randomValue = (String)values[r.nextInt(values.length)]; 



     if(tl.SporHmap.get("Hindistan'ın ulusal sporu nedir?").equals(randomValue)){ 
      q.label.setText("Hindistan'ın ulusal sporu nedir?"); 
      q.answer1.setText("Kriket"); 
      q.answer2.setText("Beyzbol"); 
      q.answer3.setText("Hokey"); 
      q.answer4.setText("Futbol"); 

      tl.SporHmap.remove(randomValue); 


      q.answer1.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent e) { 
        JOptionPane.showMessageDialog(null, "True Answer"); 
        score.setText("Score: "+scr++); 

        q.getQFrame().dispose(); 

        Spor.doClick(); 


       } 
      }); 
      q.answer3.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent e) { 
        JOptionPane.showMessageDialog(null, "Wrong Answer"); 
        q.getQFrame().dispose(); 
        Spor.doClick(); 
       } 
      }); 
      q.answer2.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent e) { 
        JOptionPane.showMessageDialog(null, "Wrong Answer"); 


        q.getQFrame().dispose(); 
        Spor.doClick(); 
       } 
      }); 
      q.answer4.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent e) { 
        JOptionPane.showMessageDialog(null, "Wrong Answer"); 


        q.getQFrame().dispose(); 
        Spor.doClick(); 
       } 
      }); 



     } 



     else if(tl.SporHmap.get("Basketbolda 3 adımdan fazla atılan adıma ne denir?").equals(randomValue)){ 
      q.label.setText("Basketbolda 3 adımdan fazla atılan adıma ne denir?"); 
      q.answer1.setText("Serbest atış"); 
      q.answer2.setText("Dışarı çıkış"); 
      q.answer3.setText("Steps"); 
      q.answer4.setText("Faul"); 

      tl.SporHmap.remove(randomValue); 
      q.answer3.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent e) { 
        JOptionPane.showMessageDialog(null, "True Answer"); 
        score.setText("Score: "+scr++); 

        q.getQFrame().dispose(); 
        Spor.doClick(); 
       } 
      }); 
      q.answer1.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent e) { 
        JOptionPane.showMessageDialog(null, "Wrong Answer"); 

        q.getQFrame().dispose(); 
        Spor.doClick(); 
       } 
      }); 
      q.answer2.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent e) { 
        JOptionPane.showMessageDialog(null, "Wrong Answer"); 

        q.getQFrame().dispose(); 
        Spor.doClick(); 
       } 
      }); 
      q.answer4.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent e) { 
        JOptionPane.showMessageDialog(null, "Wrong Answer"); 

        q.getQFrame().dispose(); 
        Spor.doClick(); 
} 
}); 

     } 
     else if(tl.SporHmap.get("Süper Lig'de hakeme kırmızı kart gösteren futbolcu kimdir?").equals(randomValue)){ 
      q.label.setText("Süper Lig'de hakeme kırmızı kart gösteren futbolcu kimdir?"); 
      q.answer1.setText("Erkan Zengin"); 
      q.answer2.setText("Özer Hurmacı"); 
      q.answer3.setText("Salih Dursun"); 
      q.answer4.setText("Aykut Demir"); 

      tl.SporHmap.remove(randomValue); 

      q.answer3.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent e) { 
        JOptionPane.showMessageDialog(null, "True Answer"); 
        score.setText("Score: "+scr++); 

        q.getQFrame().dispose(); 
        Spor.doClick(); 
       } 
      }); 
      q.answer1.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent e) { 
        JOptionPane.showMessageDialog(null, "Wrong Answer"); 

        q.getQFrame().dispose(); 
        Spor.doClick(); 

       } 
      }); 
      q.answer2.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent e) { 
        JOptionPane.showMessageDialog(null, "Wrong Answer"); 


        q.getQFrame().dispose(); 
        Spor.doClick(); 
       } 
      }); 

      q.answer4.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent e) { 
        JOptionPane.showMessageDialog(null, "Wrong Answer"); 


        q.getQFrame().dispose(); 
        Spor.doClick(); 
       } 
      }); 

     } 

    } 
}); 

は私のQuestionClassクラスです:

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 

public class QuestionClass { 
public JLabel label,label1; 
public JFrame questionFrame; 
public JButton answer1,answer2,answer3,answer4; 

public QuestionClass() { 
    questionFrame = new JFrame(); 
    questionFrame.setDefaultCloseOperation(questionFrame.HIDE_ON_CLOSE); 
    questionFrame.setLayout(new GridLayout(3,2)); 
    questionFrame.setSize(700, 350); 
    questionFrame.setVisible(true); 
    questionFrame.setLocationRelativeTo(null); 

    label = new JLabel(""); 
    questionFrame.add(label); 
    label1 = new JLabel(""); 
    questionFrame.add(label1); 
    answer1 = new JButton(""); 
    questionFrame.add(answer1); 
    answer2 = new JButton(""); 
    questionFrame.add(answer2); 
    answer3 = new JButton(""); 
    questionFrame.add(answer3); 
    answer4 = new JButton(""); 
    questionFrame.add(answer4); 
} 

public JFrame getQFrame() { 
    return questionFrame; 
} 
} 
+0

私はこれを「問題解決済み」とします。迅速に受け入れていただきありがとうございます!では、問題は何でしたか? – GhostCat

+0

**私は** tl.SporHmap.remove(randomValue); ** ** tl.SporHmap.remove( "Hindistan'ınulusal sporu nedir?")を**変更しました。あまり論理的ではないようですが、まだ問題はありません。また、私は** remove(randomValue)**の部分を** remove(....)**に変更する必要があります。 – afellay

+0

それは...変です。しかし、何でも。あなたが解決策を見つけてうれしい。 – GhostCat

答えて

2

あなたのアプローチが正しいこと:質問を表示した後、マップから削除してください。

他の言い方をすると、見るには十分な質問を地図に記入してください。それらをランダムに選択する。質問をした後、remove()あなたのマップから対応するキー。

しかし、あなたが唯一のあなたの潜在的な例ため

tl.SporHmap.remove(randomValue); 

を呼び出しているようです。その除去の条件はではなく、である必要があります。ランダムに質問を選択してから削除します。

それを超えて:あなたの「オブジェクト」モデルはあまり良くありません。その地図を持っていることには意味がありませんが、選択肢の場合は/ ifelsを持っています!代わりに:あなたはQuizzQuestionクラスを作成することができ、そしてQuizzQuestionがあります

  • 質問テキスト自体
  • 正解
  • 他の(間違った)は、あなたが、そのクラスを使用して

に答えますそのようなQuizzQuestionオブジェクトにまとめられたすべて値を入れることができます。

また、マップは必要ありません。ちょうどList<QuizzQuestion>オブジェクトが行います!

あなたのコメントを考える:基本的には、これらの問題のための可能な根本的な原因が考えられます。

  • たように言いました。もしんではないすべての可能なケースについてremove
  • あなたが「再初期化」あなたのHashMapが誤って(意味:あなたが実際に値を削除し、しかし、あなたが再作成するか、再度その後、全体マップを移入再)
  • 概念エラー:プログラムで最後の状態を覚えておく必要があります。あなたがプログラムを閉じて新たに起動すると、以前の実行で表示された質問は表示されません。それはあなたの最後の誤解です。
+0

答えをありがとう。私の先生はLinked ListsとHashmapsを組み合わせたいと思っていました。あなたが定義したより良いモデルが存在する可能性があります。ところで、私はすべてのコードを共有しませんでした。ハッシュマップのすべてのキーにはifがあります。 – afellay

+0

私は自分のコードを編集し、その大部分を共有しました。あなたがそれを見ていただければ幸いです。 – afellay

+0

Gnarf。あなたは、読みにくい空の行をすべて戻しました。私は何ができるかを見ていきます。しかし、あまり期待しないでください。すでにここでは遅れています。しかし、私が何かを見つけられず、何も聞こえないなら、私は明日チェックするかもしれません。そしてヒント:**デバッガ** ;-)を使用して調べることができます – GhostCat

関連する問題