gpt4 book ai didi

java - 如何在不重复的情况下随机将文本设置为来自 SQLite 的按钮?

转载 作者:搜寻专家 更新时间:2023-11-01 09:00:43 25 4
gpt4 key购买 nike

我有一个数据库导入到 Assets 中,我从中读取并随机将文本设置为按钮和一个 texview,代码如下:

mDbHelper.open();  

Cursor c = mDbHelper.getTestData();

List<Answer> labels = new ArrayList<Answer>();

labels.add(new Answer(c.getString(2), true));
labels.add(new Answer(c.getString(3), false));
labels.add(new Answer(c.getString(4), false));
labels.add(new Answer(c.getString(5), false));

Collections.shuffle(labels);

question.setText(c.getString(1));

bOdgovor1.setText(labels.get(0).option);
bOdgovor1.setTag(labels.get(0));
bOdgovor1.setOnClickListener(clickListener);

bOdgovor2.setText(labels.get(1).option);
bOdgovor2.setTag(labels.get(1));
bOdgovor2.setOnClickListener(clickListener);

bOdgovor3.setText(labels.get(2).option);
bOdgovor3.setTag(labels.get(2));
bOdgovor3.setOnClickListener(clickListener);

bOdgovor4.setText(labels.get(3).option);
bOdgovor4.setTag(labels.get(3));
bOdgovor4.setOnClickListener(clickListener);

这是我的 db TestAdapter 代码:

public Cursor getTestData()
{;
try
{
String sql ="SELECT * FROM tblPitanja ORDER BY RANDOM() LIMIT 1";

Cursor mCur = mDb.rawQuery(sql, null);
if (mCur!=null)
{
mCur.moveToNext();
}
return mCur;
}
catch (SQLException mSQLException)
{
Log.e(TAG, "getTestData >>"+ mSQLException.toString());
throw mSQLException;
}
}

在为按钮设置问题时效果很好,但问题会重复出现。如何避免这种情况?

最佳答案

有更多方法可以解决您的问题:

  1. 执行开头的sql语句(不限),答对后移动到游标的下一个条目
  2. 缓冲已经回答过的问题

第二种方法可以按如下方式完成:

首先,更改您的方法和 sql,包括一个 where 子句:

public Cursor getTestData(String whereClause)
{;
try
{
String sql ="SELECT * FROM tblPitanja WHERE 1 = 1 " + whereClause + " ORDER BY RANDOM() LIMIT 1";
[...]

其次,在你的游戏类中缓冲已经回答的问题:

将 LinkedList 添加到您的游戏类

LinkedList<Long> mAnsweredQuestions = new LinkedList<Long>();

将已回答的问题添加到 LinkedList:

Cursor c = mDbHelper.getTestData(generateWhereClause());
mAnsweredQuestions.add(c.getLong(0));
List<Answer> labels = new ArrayList<Answer>();
[...]

添加一个生成 where 子句的函数:

private String generateWhereClause(){
StringBuilder result = new StringBuilder();
for (Long l : mAnsweredQuestions){
result.append(" AND " + YOURID + " <> " + l);
}
return result.toString();
}

关于java - 如何在不重复的情况下随机将文本设置为来自 SQLite 的按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15185495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com