簡體   English   中英

字符串數組不匹配

[英]String arrays does not match

我的程序顯示一系列問題(逐個問題)。 在我寫完答案后,一條警告信息應告訴我答案是對還是錯。 問題是,即使我寫了正確的答案,警報消息也會顯示“錯誤”消息。

final String questions[] = {"Who's Tom?", "Who's Luca?", "Who's Flavie?"}
final String answers[] = {"American", "Italian", "French"}

// display question
answer_question.setOnClickListener(new View.OnClickListener() {
    int CurrentQuestionIndex = 0;

    public void onClick(View v) {
        ask_question.setText(question[(CurrentQuestionIndex++) % (questions.length)]);

        // discuss question versus answer
        EditText answer = (EditText) findViewById(R.id.tvReponseF);

        if (answer.equals(answers[CurrentQuestionIndex])) {
            alertMessageRight();
        } else {
            alertMessageFalse();
        }
    } 
});

問題是您正在將EditText對象與String字段進行比較。 您必須將StringString進行比較。

這是怎么做的:

String answer = ((EditText) findViewById(R.id.tvReponseF)).getText().toString();

if(answer.equals(answers[CurrentQuestionIndex]))
{
     ...

您需要從EditText對象獲取文本。 您正在將EditText對象與String進行比較。

因此,您的完整代碼應如下所示:

final String questions[] = {"Who's Tom?", "Who's Luca?", "Who's Flavie?"}
final String answers[] = {"American", "Italian", "French"}

// display question
answer_question.setOnClickListener(new View.OnClickListener() {
int CurrentQuestionIndex = 0;
    public void onClick(View v) {

        ask_question.setText(question[(CurrentQuestionIndex++) % (questions.length)]);
        // discuss question versus answer
        EditText editText = (EditText) findViewById(R.id.tvReponseF);
        if(editText.getText().toString().equals(answers[CurrentQuestionIndex]))  
        {
            alertMessageRight();
        } else {
            alertMessageFalse();
        }
    } 
 });

問題是你在實際檢查答案是否正確之前增加了索引:

ask_question.setText(question[(CurrentQuestionIndex++) % (questions.length)]);

所以,如果問題索引是0,你會得到一個問題0,然后問題索引將變為1,因為++運算符,你將閱讀答案1而不是0.我希望你理解這一點。 你需要做的是從這里刪除++並將其放在這里:

if(answer.getText().toString().equals(answers[(CurrentQuestionIndex++) % (questions.length)]))

因為此時,您將閱讀正確的答案並轉到下一個索引。

編輯

這是你最大的問題。 另外你需要比較answer.getText().toString()就像其他人已經注意到的那樣。

嘗試這個:

EditText et;//initialize first!!
et.getText().toString().equals(....);
 EditText answer = (EditText) findViewById(R.id.tvReponseF);

 if(answer.getText().toString().toLowerCase().equals(answers[CurrentQuestionIndex].toLowerCase()))  
{
    alertMessageRight();
} else {
    alertMessageFalse();
}

 } 

我添加了toLowerCase()只是使問題不區分大小寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM