gpt4 book ai didi

java - 带有多个答案的 Arraylist Android Studio 测验应用程序

转载 作者:行者123 更新时间:2023-12-02 10:31:58 25 4
gpt4 key购买 nike

我正在制作一个测验应用程序并使用 ArrayList 。我对答案有疑问:当我只有一个答案时它可以工作,但如果问题有两个答案我该怎么办?

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;

import java.util.ArrayList;

import cn.pedant.SweetAlert.SweetAlertDialog;

public class MainActivity extends AppCompatActivity {

TextView questionLabel, questionCountLabel, scoreLabel;
EditText answerEdt;
Button submitButton;
ProgressBar progressBar;
ArrayList<QuestionModel> questionModelArraylist;


int currentPosition = 0;
int numberOfCorrectAnswer = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


questionCountLabel = findViewById(R.id.noQuestion);
questionLabel = findViewById(R.id.question);
scoreLabel = findViewById(R.id.score);

answerEdt = findViewById(R.id.answer);
submitButton = findViewById(R.id.submit);
progressBar = findViewById(R.id.progress);

questionModelArraylist = new ArrayList<>();

setUpQuestion();

setData();

submitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

checkAnswer();
}
});

answerEdt.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button
Log.e("event.getAction()",event.getAction()+"");
Log.e("event.keyCode()",keyCode+"");
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {

checkAnswer();
return true;
}
return false;
}
});

}
public void checkAnswer(){
String answerString = answerEdt.getText().toString().trim();




if(answerString.equalsIgnoreCase(questionModelArraylist.get(currentPosition).getAnswer())){
numberOfCorrectAnswer ++;



new SweetAlertDialog(MainActivity.this, SweetAlertDialog.SUCCESS_TYPE)
.setTitleText("Sehr gut!")
.setContentText("Richtig!")
.setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
@Override
public void onClick(SweetAlertDialog sweetAlertDialog) {
currentPosition ++;

setData();
answerEdt.setText("");
sweetAlertDialog.dismiss();
}
})
.show();


}else {

new SweetAlertDialog(MainActivity.this, SweetAlertDialog.ERROR_TYPE)
.setTitleText("Falsch :(")
.setContentText("Die Richtige Antwort ist : "+questionModelArraylist.get(currentPosition).getAnswer())
.setConfirmText("OK")
.setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
@Override
public void onClick(SweetAlertDialog sDialog) {
sDialog.dismiss();

currentPosition ++;

setData();
answerEdt.setText("");
}
})
.show();
}





int x = ((currentPosition+1) * 100) / questionModelArraylist.size();

progressBar.setProgress(x);



}




public void setUpQuestion(){


questionModelArraylist.add(new QuestionModel("Write one planet located between Earth and the sun","Venus or Mercury"));

questionModelArraylist.add(new QuestionModel("the 5th planet from the sun","Jupiter"));

questionModelArraylist.add(new QuestionModel("write names of any two oceans","Atlantic Ocean or Arctic Ocean or Indian Ocean or Pacific Ocean orSouthern Ocean"));



}

public void setData(){


if(questionModelArraylist.size()>currentPosition) {

questionLabel.setText(questionModelArraylist.get(currentPosition).getQuestionString());

scoreLabel.setText("Ergebnis :" + numberOfCorrectAnswer + "/" + questionModelArraylist.size());
questionCountLabel.setText("Frage Nummer : " + (currentPosition + 1));


}else{


new SweetAlertDialog(MainActivity.this, SweetAlertDialog.SUCCESS_TYPE)
.setTitleText("Du bist Fertig :)")
.setContentText("dein Ergebnis ist : "+ numberOfCorrectAnswer + "/" + questionModelArraylist.size())
.setConfirmText("Wiederholen")
.setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
@Override
public void onClick(SweetAlertDialog sDialog) {

sDialog.dismissWithAnimation();
currentPosition = 0;
numberOfCorrectAnswer = 0;
progressBar.setProgress(0);
setData();
}
})
.setCancelText("schließen")
.setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() {
@Override
public void onClick(SweetAlertDialog sDialog) {

sDialog.dismissWithAnimation();
finish();
}
})
.show();

}

}



}

问题类别

public class QuestionModel {

public QuestionModel(String questionString, String answer) {
QuestionString = questionString;
Answer = answer;
}

public String getQuestionString() {
return QuestionString;
}

public void setQuestionString(String questionString) {
QuestionString = questionString;
}

public String getAnswer() {
return Answer;
}

public void setAnswer(String answer) {
Answer = answer;
}

private String QuestionString;
private String Answer;


}

正如你所看到的,我想在第一个问题中回答水星或金星,第二个问题是木星,第三个问题有 5 个答案“大西洋或北冰洋或印度洋或太平洋或南半球”海洋”我怎样才能让它发挥作用?谢谢。

最佳答案

基本上:通过更改数据模型。

您看,您创建类来“建模”现实。如果您想允许多个答案,那么简单的一对一映射(如 QuestionModel 所暗示的那样)根本不起作用。那么你的模型应该是 1:n,就像 1 个问题字符串,但答案可能是 List<String>例如。对于只有一个答案的问题,该列表仅包含一个条目。

这就是实现这一目标的方法:首先您考虑如何组织数据,然后构建所有内容,包括围绕它的 UI 结构。

关于java - 带有多个答案的 Arraylist Android Studio 测验应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53569079/

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