【发布时间】:2018-11-11 15:43:31
【问题描述】:
我在编程方面很新,我正在尝试将随机问题生成到测验中。我可以做到这些问题是随机的,但问题仍在重复。我怎样才能防止它们重复?我已经看过几篇文章了,只是不太明白如何实现代码。
这是我存储和显示问题的主要活动:
public class MainActivity extends AppCompatActivity {
private TextView textView;
private Button generateQbutton;
private boolean aBoolean;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textV);
generateQbutton = (Button) findViewById(R.id.buttonP);
randomFacts ();
generateQbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder altdial = new AlertDialog.Builder(MainActivity.this);
altdial.setMessage(factArray[0].getmDialog()).setPositiveButton("k", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
AlertDialog ctnalert = altdial.create();
ctnalert.show();
randomFacts ();
}
});
}
public void randomFacts (){
shuffelFacts ();
textView.setText(factArray[0].getmFacts());
aBoolean = factArray[0].ismAnswers();
}
Facts f01 = new Facts(true, "Quesstion1?", "Dialog for Q1!");
Facts f02 = new Facts(false, "Quesstion2??", "Dialog for Q2!");
Facts f03 = new Facts(true, "Quesstion3??", "Dialog for Q3!");
Facts f04 = new Facts(false, "Quesstion4??", "Dialog for Q4!");
Facts f05 = new Facts(true, "Quesstion5?", "Dialog for Q5!");
Facts [] factArray = new Facts[]{
f01,f02,f03,f04,f05,
};
public void shuffelFacts(){
Collections.shuffle(Arrays.asList(factArray));
}
}
这是我的构造函数:
public class Facts {
private boolean mAnswers;
private String mFacts;
private String mDialog;
public Facts(boolean mAnswers, String mFacts, String mDialog) {
this.mAnswers = mAnswers;
this.mDialog = mDialog;
this.mFacts = mFacts;
}
public boolean ismAnswers() {
return mAnswers;
}
public String getmFacts() {
return mFacts;
}
public String getmDialog(){
return mDialog;
}
}
【问题讨论】:
-
您在提出问题后将其从列表中删除。当列表为空时,所有问题都被问到并且测验结束。所以最好使用简单的 ArrayList 并使用 Random-class 在运行时选择关于当前元素的问题。
-
您可以按照@HenningLuther 的建议进行操作,也可以将已回答的问题移至另一个列表以供完成/已回答的问题参考。
-
打乱数组顺序读取