Mon application est une application quiz, dans ce qu'il ya une partie qui recrache un pour cent des questions auxquelles l'utilisateur a obtenu juste après avoir répondu à toutes les questions comme Toast.
Le toast montre jusqu'à mais le pourcentage est toujours à venir 0.
J'ai quelques messages du journal juste en face:
Log.i("MainActivity", "Amount i got right "+Integer.toString(right));
Log.i("MainActivity", "total is "+Integer.toString(total));
Toast.makeText(this, "You answered " + (right/total)*100 + "% of questions correct", Toast.LENGTH_SHORT).show();
Dans le journal, il dit: « Je / MainActivity: Montant i a obtenu le droit 4 total est 6 »
Pourquoi le pourcentage de pain grillé à venir comme 0 ??
voici la fonction:
int i = 0;
int total = mQuestionBank.length;
check = true;
right = 0;
while (i<total && check){
if(mQuestionBank[i].isAlreadyAnswered()){
if(mQuestionBank[i].isAnswerTrue()){
right+=1;
check = true;
}
}else{
check = false;
}
i++;
}
if(check) {
double percent = (right / total) * 100;
Log.i("MainActivity", "Amount i got right "+Integer.toString(right));
Log.i("MainActivity", "total is "+Integer.toString(total));
Toast.makeText(this, "You answered " + (right/total)*100 + "% of questions correct", Toast.LENGTH_SHORT).show();
}else {
int question = mQuestionBank[mCurrentIndex].getTextResId();
mQuestionTextView.setText(question);
mTrueButton.setEnabled(!mQuestionBank[mCurrentIndex].isAlreadyAnswered());
mFalseButton.setEnabled(!mQuestionBank[mCurrentIndex].isAlreadyAnswered());
}
La Toast dit: « Vous avez répondu à 0% des bonnes questions »
Le code est OK. Vous avez juste besoin d'une modification simple. Essaye ça :
double percent = (right*100)/total ;
ou ,
double percent = ((double)right/total)*100 ;
Espérons que cela fonctionnera.
Mise à jour :
Pourquoi votre code ne fonctionnait pas?
A titre d'exemple prendre right = 5
et total = 10
. Comme la variable juste et vrai sont des nombres entiers de sorte right/total
sera de 0 zéro toujours parce qu'ils retourneront une valeur entière et la valeur après .
ne sont pas pris en compte dans la valeur entière. Pour résoudre le problème , vous pouvez prendre à droite et tout aussi variable double ou jeter la droite double. Et la formule d' abord expliqué. *** Parce que , right*100 = 500
et (right*100)/total = 500/10 = 50
.