मैं एक प्रश्नोत्तरी आवेदन कर रहा हूं और 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;


}

जैसा कि आप देख सकते हैं, मैं पहले प्रश्न का उत्तर बुध या शुक्र बनाना चाहता हूं, दूसरा प्रश्न बृहस्पति है और 3 डी प्रश्न के 5 उत्तर हैं "अटलांटिक महासागर या आर्कटिक महासागर या हिंद महासागर या प्रशांत महासागर या दक्षिणी महासागर" कैसे क्या मैं इसे काम पर ला सकता हूँ? धन्यवाद।

0
j.ibra10 1 पद 2018, 11:30

2 जवाब

सबसे बढ़िया उत्तर

@GhostCat सही है, लागू करने से पहले आपको विश्लेषण करना होगा। आपकी विशिष्ट स्थिति के लिए मैं सोच रहा हूं कि गणना सहायक हो सकती है। मैं आपके लक्ष्य के बारे में पूरी तरह से स्पष्ट नहीं हूं लेकिन शुरू में मैं इस तरह से पहुंचूंगा।

और इसे आपके प्रश्न मॉडल वर्ग में सामान्यीकृत करने के लिए मैं पहले किसी भी संभावित उत्तर का वर्णन करने के लिए एक इंटरफ़ेस बनाउंगा।

interface AnswerInterface {
    val value: String
}

मैं जेनरिक का उपयोग करूंगा जो इस इंटरफ़ेस का विस्तार करता है और मेरा प्रश्न मॉडल तब इस प्रकार बन जाएगा।

class QuestionModel<QuestionAnswer : AnswerInterface>(
        var question: String,
        vararg answers: QuestionAnswer
)

प्रश्न उत्तर कोई भी वर्ग हो सकता है जो उत्तर इंटरफ़ेस को लागू करता है और varard का अर्थ है कि मेरे पास उत्तर के रूप में कितने भी इरादे हो सकते हैं।

इसे ध्यान में रखते हुए, मेरे उत्तर एनम होंगे:

enum class PlanetAnswers(override val value: String) : AnswerInterface {
    VENUS("Venus"),
    MERCURY("Mercury"),
    JUPITER("Jupiter")
}

अंत में, सब कुछ इस तरह एक साथ जुड़ता है:

val question1 = QuestionModel("One planet between Earth and Sun?", PlanetAnswers.VENUS, PlanetAnswers.MERCURY)
val question2 = QuestionModel("The 5th planet from the Sun?", PlanetAnswers.JUPITER)

मेरे पास एक प्रश्न और जितने भी उत्तर हैं, लेकिन वे सभी एक ही एनम से आने चाहिए। मैं और अधिक एनम बना सकता हूं और फिर विभिन्न उत्तरों के साथ और प्रश्न बना सकता हूं।

0
iFanie 2 पद 2018, 23:42

मूल रूप से: अपना डेटा मॉडल बदलकर।

आप देखते हैं, आप अपनी कक्षाओं को "मॉडल" वास्तविकता में बनाते हैं। यदि आप एकाधिक उत्तरों की अनुमति देना चाहते हैं, तो एक से एक मैपिंग (जैसा QuestionModel का तात्पर्य है) बस काम नहीं करता है। तब आपका मॉडल 1:n होना चाहिए, जैसे 1 प्रश्न स्ट्रिंग, लेकिन उत्तर उदाहरण के लिए List<String> हो सकते हैं। केवल एक उत्तर वाले प्रश्नों के लिए, उस सूची में केवल एक ही प्रविष्टि है।

वहां जाने का यही तरीका है: पहले आप सोचते हैं कि आपके डेटा को कैसे व्यवस्थित करने की आवश्यकता है, फिर आप सब कुछ बनाते हैं, जिसमें आपके UI संरचनाएं भी शामिल हैं।

1
GhostCat 1 पद 2018, 11:37