2016-07-08 33 views
5

Il mio programma visualizza una serie di domande (domanda una per una). Dopo aver scritto una risposta, un messaggio di avviso dovrebbe dirmi se la mia risposta è giusta o sbagliata. Il problema è che, anche se scrivo la risposta giusta, il messaggio di avviso mostra un messaggio "falso".Gli array di stringhe non corrispondono

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(); 
     } 
    } 
}); 
+0

Pubblica la tua matrice 'risposte'. –

risposta

2

Prova questo:

EditText et;//initialize first!! 
et.getText().toString().equals(....); 
6

Il problema è che si sta confrontando un oggetto EditText con un campo String. È necessario confrontare String con String invece.

Ecco come si fa:

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

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

non è tutto, è solo un piccolo problema. Sta aumentando il contatore degli indici nel posto sbagliato, controlla la mia risposta, l'ho coperto anche io. – Vucko

+0

Grazie! Il codice funziona –

3

È necessario per ottenere il testo dall'oggetto EditText. Si sta confrontando un oggetto EditText con un String.

Così, il vostro codice completo dovrebbe essere così:

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(); 
     } 
    } 
}); 
3

Il problema è che si sta aumentando l'indice prima di poter realmente controllare se la risposta è corretta:

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

Così il se il l'indice delle domande è 0, riceverai una domanda 0, quindi l'indice delle domande diventerà 1 a causa dell'operatore ++ e leggerai la risposta 1 anziché 0. Spero che tu capisca questo. Quello che dovete fare è togliere il ++ da qui e metterlo qui:

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

Perché a questo punto, potrai leggere la risposta corretta e passare al successivo punto di indice.

EDIT:

Questo è stato il tuo più grande problema. Inoltre è necessario confrontare il answer.getText().toString() come già notato dagli altri.

+0

Buon lavoro! Grazie! –

2
EditText answer = (EditText) findViewById(R.id.tvReponseF); 

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

} 

Ho aggiunto il toLowerCase() solo per rendere insensibile la distinzione tra maiuscole e minuscole.