gpt4 book ai didi

java - 在随机化的问题列表上创建 "favorite"特征

转载 作者:IT老高 更新时间:2023-10-28 20:41:47 24 4
gpt4 key购买 nike

我很难为我的应用正确实现“Collection 夹”功能。在对象列表中移动,用户应该能够选中/取消选中某个 Collection 项。一旦 Activity 进入 onPause(); 状态,它应该保存 Collection 列表(更确切地说,指示某物是否 Collection 的 boolean 标记的完整列表... true 表示最喜欢,false 表示不喜欢。)显然,在进入 onResume(); 状态后,应该加载列表以便他们查看他们之前标记的 Collection 夹。

我认为,我的问题真正来自于列表在初始化时是随机的这一事实。我确定我的算法已经关闭,但我尝试了各种方法,以至于我几乎无法再看它了。

主要 Activity Java

public class MainActivity extends ActionBarActivity {


Global global_main;


@Override
protected void onCreate(Bundle savedInstanceState) {

global_main = Global.getInstance("all");

}



@Override
protected void onResume(){
super.onResume();


SharedPreferences settings = getSharedPreferences(FILE_FAVORITES, 0);

for(int index = 0; index < TOTAL_QUESTIONS; index++){

boolean favFromFile = settings.getBoolean(("savedFavorite_" + String.valueOf(index)), false);
global_main.setFav(index, favFromFile);

}

}



@Override
protected void onPause(){
super.onPause();

SharedPreferences settings = getSharedPreferences(FILE_FAVORITES, 0);
SharedPreferences.Editor editor = settings.edit();

for(int index = 0; index < TOTAL_QUESTIONS; index++){
editor.putBoolean(("savedFavorite_" + String.valueOf(index)), global_main.getFav(index));

// Commit the edits!
editor.commit();
}

}

练习 Java

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Intent intent = getIntent();
selectedSection = intent.getStringExtra(chooseSection.chosenSection);

global = Global.getInstance(selectedSection);

}

全局类

public class Global {


private static Global global = null;

//Current total of questions which the user has chosen
//EX: if Multiplication was chosen and has 10 questions in the array
//Then this equals 10
int CURRENT_TOTAL;

//This is the position that the first question of the user's choice starts with
//EX: If user chooses Multiplication, and the multiplication questions start at questions[19];
//Then this equals 19
int CURRENT_START;

//This is the position that the last question of the user's choice ends with
//EX: If user chooses Multiplication, and the multiplication questions end at questions[24];
//Then this equals 24
int CURRENT_END;


//Basic question structure
class questionStruct
{

String q;
String a;
int position; //original position in the array;
boolean favorite;

}

//Array of question structures
questionStruct[] questions = new questionStruct[TOTAL_QUESTIONS];


//userChoice is the choice of question type that the user has selected.
//EX: Multiplication, Division, Addition, Subtraction, or All/Default
public static Global getInstance(String userChoice) {
if(global == null)
{
global = new Global();
global.initialize();
}

global.getChoice(userChoice);
global.setQuestionsDefault();
global.randomize();
return global;

}


public void initialize() {
for (int i = 0; i < TOTAL_QUESTIONS; i++) {
questions[i] = new questionStruct();
}

questions[0].q = "Question 1 Text";
questions[0].a = "Answer";
questions[0].position = 0;
questions[1].q = "Question 2 Text";
questions[1].a = "Answer";
questions[1].position = 1;
questions[2].q = "Question 3 Text";
questions[2].a = "Answer";
questions[2].position = 2;
....ETC.
....ETC.
....ETC.
}


public void setQuestionsDefault(){

questionStruct temp = new questionStruct();

for(int index = 0; index < TOTAL_QUESTIONS; index++){

int count = questions[index].position;

temp = questions[count];
questions[count] = questions[index];
questions[index] = temp;

temp = null;
}
}


//Randomize the questions only within the range of the category
//which the user has chosen
public void randomize(){


for(int index = CURRENT_END; index >= CURRENT_START; index --)
{
//Generate random number to switch with random block
Random rand = new Random();
int currentQ = rand.nextInt((CURRENT_END - CURRENT_START) + 1) + CURRENT_START;


//Switch two Question blocks
questionStruct temp = questions[currentQ];
questions[currentQ] = questions[index];
questions[index] = temp;


}
}



public void setFav(int q, boolean b){
questions[q].favorite = b;
}


public boolean getFav(int q){
return questions[q].favorite;
}

这可能与我的问题有关。如果我遗漏了任何内容或没有任何意义,我深表歉意。随意问的问题。我目前仍在更改所有内容以使其正常工作,因此我可能复制了一些不太合乎逻辑的内容。

编辑:我还将添加“Collection 夹”按钮单击的代码,以将 Collection 夹变为非 Collection 夹,反之亦然。尽管这对完成这项工作至关重要,但我并不担心能否正常运行,因为它非常简单。但是,如果有人觉得他们想看到它,并反过来帮助我,那么就在这里。

这也在练习题 Java 文件中:

public void setFavoriteButton(){
if(global.getFav(tempQQ)){
FAVORITE.setBackgroundColor(Color.YELLOW);
}
else{
FAVORITE.setBackgroundColor(getResources().getColor(R.color.primary));
}
}


@Override
public void onClick(View v){

switch(v.getId()){

case R.id.favorite:
updateFavorite();
break;
}
}


public void updateFavorite(){

if(global.getFav(tempQQ)){
global.setFav(tempQQ, false);
}
else{
global.setFav(tempQQ, true);
}

setFavoriteButton();
}

编辑:我可能应该补充一点,我认为问题是算法问题。如果我没有将“随机化”功能与 Collection 夹结合使用,我想我会很好。但我认为两者对于我的应用程序非常有用都很重要。所以这就是我的重点所在,尝试同时实现一个 Collection 夹功能,同时在每次调用 Global 时保持随机化。

最佳答案

我真的建议您使用更面向对象的方法来处理您的模型。

您可以创建模型类Quiz,它可能看起来像这样:

class Quiz{

private boolean favorite;
private String question;
private String answer;

public Quiz(String question, String answer){
this.question = question;
this.answer = answer;
}

public boolean isFavorite() {
return favorite;
}

public void setFavorite(boolean favorite) {
this.favorite = favorite;
}

//...
}

通过这种方式,您可以创建一个Quiz列表并进行随机播放、排序、查看 Collection 等:

    //Create the list of questions
ArrayList<Quiz> myQuiz = new ArrayList<Quiz>();
myQuiz.add(new Quiz("Question?", "Ansewer!"));
//...

//Shuffle all!
Collections.shuffle(myQuiz);

//Iterate and check for favorites
for(Quiz q : myQuiz){
if(q.isFavorite()){
//this is favorite!
}
}

关于数据的持久性,可以考虑SQLite方法,或者干脆serialize your list and save it在您的 SharedPreference 中。

关于java - 在随机化的问题列表上创建 "favorite"特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29324980/

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