【问题标题】:Getting random questions in an Array without repeating questions在不重复问题的情况下在数组中获取随机问题
【发布时间】: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 的建议进行操作,也可以将已回答的问题移至另一个列表以供完成/已回答的问题参考。
  • 打乱数组顺序读取

标签: android arrays random


【解决方案1】:
public void randomFacts (){
    shuffelFacts ();
    for (Facts facts : factArray) {
        if (!facts.isAnswered()){
            textView.setText(facts.getmFacts());
            facts.setisAnswered(true);
            return;
        }
    }

}

一旦问题得到回答,您就可以设置它setisAnswered(true) 当您随机播放列表并选择另一个答案时,您只会选择那些暂时没有回答的答案

if (!facts.isAnswered()){ textView.setText(facts.getmFacts()); }

【讨论】:

    【解决方案2】:

    您可以定义一个 List 来保存您的事实,确保随机播放此列表而不是您的数组,最后,每次使用它时删除 1 个事实。

    类似这样的:

    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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多