我有一个awk '{
D[$2]++
A[$2 FS $4]++
B[$2 FS $4 FS $3] = B[$2 FS $4 FS $3] ? B[$2 FS $4 FS $3] "," $1 : $1
if(!tmp[$2 FS $4 FS $3]++)order[++c]=$2 FS $4 FS $3
}
function orderp(subs,mains){
for(j in B){
if(j==subs){
split(j,X)
if(X[1] FS X[2] == mains)
print X[3]"="B[j]
}
}
}
END{
for(k in D){
print k"("D[k]")"
for(i in A){
split(i,X)
if(k == X[1]){
print X[2]"("A[i]") "
for(m=1;m<=c;m++){ orderp(order[m],i) }
print ""
}
}
}
}
' p.txt
来显示问题调用Qus,我有4 JTextPane
,A,B,C,D。并且在不同的页面上有五个问题。当您选择正确答案a,b,c或d时,会向JLabel
来电JLabel
添加10点。
但我的问题是,是时候点击a,b,c,d再次,再次添加10。我只是希望它在每个页面上添加10次,如果下一页上的答案是正确的,它应该在页面上添加另外10个而不是多个10或者答案,这将是一个作弊。
这是代码
Counter
请注意,这只是一个问题和答案。在我的项目中,我有20个。我只想让每个按钮添加10次,并在多次点击时添加它感谢
答案 0 :(得分:0)
我猜问题是什么:只要发生鼠标事件(mouse_pressed,mouse_down,mouse_release),就会调用AmouseClicked方法。所以这应该可以解决问题。
If(callquestion==1 && D.isFocusable())
需要
If(callquestion==1 && D.isFocusable() && evt.getModifiersEx()==MouseEvent.MOUSE_PRESSED)
答案 1 :(得分:0)
不是直接存储积分而是使用地图(问题,答案)来存储用户给出的答案:
// somewhere in your main programme
List<Integer> userAnswers;
List<Integer> correctAnswers;
...
// at programme startup initialise to #answers
userAnswers = Arrays.toList(new Integer[20]); // create list full of null
correctAnswers = new ArrayList<Integer>();
for(int i = 0; i < 20; ++i)
correctAnswers.add(0); // set all correct answers to #a (change this accordingly)
...
// when user answers question #q with answer #a
userAnswers.set(q, a); // set answer at #q to #a
Counter.setText(getScore() + " "); // update the counter every time the list changes!
...
// getScore counts up the awarded points for all questions
private int getScore() {
int sum = 0;
for(int q = 0; q < correctAnswers.size(); ++q) {
int expected = correctAnswers.get(q); // assume initialised
Integer actual = userAnswers.get(q); // may be null
if(actual != null && actual == expected)
sum += 10; // or have a third list indicating how many points each question awards
}
}
这还有其他优点,比如你能够告诉用户他到底准确找到了哪些答案,以及哪些答案出错了。
答案 2 :(得分:0)
如果我理解正确,我相信这是解决问题的更好方法:
您在设置中执行的操作:
JLabel a = new JLabel()
a.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
aclicked();
}
});
JLabel b = new JLabel()
b.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
bclicked();
}
});
//do this for c and d as well
如果给出了正确答案,那么您可以通过这些方法查看是否给出了正确答案。
答案 3 :(得分:0)
由于您一次只能提出一个问题,为什么不重复使用该页面呢? :)
首先,我们创建一个问题类......
class Question{
String question;
String answer1, answer2, answer3, answer4;
int userAnswer;
int correctAnswer;
boolean scoredPoints;
Question(String q, int correct, String a1, String a2, String a3, String a4){
this.question = q;
this.correctAnswer = correct;
this.answer1 = a1;
this.answer2 = a2;
this.answer3 = a3;
this.answer4 = a4;
}
}
然后我们可以创建问题......
Question q1 = new Question("1+1",1,"2","4","6","8");
//constructor is question, correct answer, ans 1, 2, 3, 4.
然后创建一个问题清单......
ArrayList<Question> questions = new ArrayList<>();
将问题添加到列表中......
questions.add(q1);
然后你做同样的事情来提出问题,但是,你会引用问题.get(x)其中x是问题编号(减1,因为数组索引0等于对象1) 。
当用户按下某个按钮(例如A)时,您可以调用actionlistener并调用:
questions.get(x).scoredPoints = true; //prevents cheating
questions.get(x).userAnswer = buttonNumber; //sets user question answer
在这种情况下,x是当前的问题编号。
通过这种方式,您可以获得连续的问题流,他们的答案将被记录和检查,并且他们不能“作弊”。