Android 获取数组中的随机问题而不重复问题
我是一个编程新手,我正在尝试在测验中生成随机问题。我可以确定问题是随机的,但问题仍然在重复。我怎样才能防止它们复制?我已经看过好几篇文章,但我不太明白如何实现代码 这是我存储和显示问题的主要活动:Android 获取数组中的随机问题而不重复问题,android,arrays,random,Android,Arrays,Random,我是一个编程新手,我正在尝试在测验中生成随机问题。我可以确定问题是随机的,但问题仍然在重复。我怎样才能防止它们复制?我已经看过好几篇文章,但我不太明白如何实现代码 这是我存储和显示问题的主要活动: public class MainActivity extends AppCompatActivity { private TextView textView; private Button generateQbutton; private boolean aBoolean; @Override p
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;
}
}
您可以定义一个
列表
来保存您的事实,确保将此列表而不是数组洗牌,最后,每次使用时删除一个事实
大概是这样的:
List<Facts> factsList = Arrays.asList(factArray);
public void randomFacts (){
shuffelFacts (); //shuffles the list instead of the array
if (factsList.isEmpty()) return; //make sure there're more items
Facts facts = factsList.remove(0);
textView.setText(facts);
aBoolean = facts.ismAnswers();
}
List factsList=Arrays.asList(factArray);
公共事实(){
shuffelFacts();//洗牌列表而不是数组
if(factsList.isEmpty())return;//确保还有更多项
事实=事实列表。删除(0);
textView.setText(事实);
aBoolean=facts.ismAnswers();
}
回答问题后,您将其设置为setisAnswered(true)
当你们洗牌列表并选择另一个答案时,你们只会选择那个些目前还并没有回答的答案
if(!facts.isAnswered()){
textView.setText(facts.getmFacts());
}
您在提出问题后将其从列表中删除。当列表为空时,提问的所有问题和测验结束。因此,最好使用一个简单的ArrayList,并使用Random类在运行时选择当前元素上的问题。您可以按照@HenningLuther的建议进行操作,也可以将已回答的问题移动到另一个列表中以供已完成/已回答的问题参考。将数组无序排列,然后按顺序阅读
public void randomFacts (){
shuffelFacts ();
for (Facts facts : factArray) {
if (!facts.isAnswered()){
textView.setText(facts.getmFacts());
facts.setisAnswered(true);
return;
}
}
}