Jump to content

Archived

This topic is now archived and is closed to further replies.

Nhi

[Résolu] Optimisation

Recommended Posts

Bonjour 


Je recherche actuellement une solution pour optimiser mon programme qui consiste à afficher une question avec 4 réponses possibles.


Cependant la question est choisis aléatoirement parmi une liste de 500 questions.


J'ai donc crée une variable aléatoire entre 1 et 500:


numero_question = (int) (Math.random() * 500 + 1); 


et selon le numéro je récupère la question avec ses 4 réponses possibles :


if(numero_question == 1)


{


q = res.getString(R.string.q1);


a = res.getString(R.string.a1);


b = res.getString(R.string.b1);


c = res.getString(R.string.c1);


d = res.getString(R.string.d1);


}


if(numero_question == 2)


{


q = res.getString(R.string.q2);


a = res.getString(R.string.a2);


b = res.getString(R.string.b2);


c = res.getString(R.string.c2);


d = res.getString(R.string.d2);


}


Le problème est que je dois répéter ce code 500 fois pour chaque question c'est a dire environ 4000 lignes de codes.


Ma question est donc y a t-il un moyen pour remplacer R.string.q1 , R.string.q2 ...etc


par R.string.qX  


avec X prenant la valeur de numero_question


ainsi il suffirait d'écrire :


numero_question = (int) (Math.random() * 500 + 1); 


X = numero_question;


 q = res.getString(R.string.qX);


 a = res.getString(R.string.aX);


 b = res.getString(R.string.bX);


 c = res.getString(R.string.cX);


 d = res.getString(R.string.dX);


En espérant avoir été le plus clair possible.


Merci par avance pour vos réponses.


 


Share this post


Link to post
Share on other sites

Une supposition (Je débute) :

q = res.getString(R.string.q + X)

Envoyé depuis mon Nexus 7 en utilisant Tapatalk 4 Beta

Share this post


Link to post
Share on other sites

Et bien j'avais déja essayer de mettre ("q" + X) dans une chaine de caractere S 

Mais le probleme est que la fonction res.getString(R.string.S) ne marche pas car elle ne reconnait pas la variable S, elle va rechercher une phrase qui s'appele S et pas qX

Share this post


Link to post
Share on other sites

Ça parfait logique. :/ J'aurais tenter sorry :/

Envoyé depuis mon Nexus 7 en utilisant Tapatalk 4 Beta

Share this post


Link to post
Share on other sites

l'utilisation d'une bdd serait-elle pas plus simple  ?

Car avec sql sur android parcourir chaque ligne est super simple..... 

 

Voila j’espère que ça pourra te dépanner...

 

ps: oublie pas de poster la solution au cas ou ^^

Share this post


Link to post
Share on other sites

En effet la base de données parait être une bonne solution. 

Cependant je dois également faire une traduction en anglais ce qui est assez facile en utilisant le fichier strings.

Si j'utilise une base de données il faudrait alors stocker les 2 traductions dans 2 base de données différentes.

Il faudrait alors une fonction en java pour connaitre la langue dans laquelle l'application est utilisé pour pouvoir utiliser la bonne base de données.

Une telle fonction existe t-elle ? 

Share this post


Link to post
Share on other sites

la j'ai pas de quoi te répondre mais oui il y a cette fonction....

Sinon pourquoi ne pas mettre dans ta bdd les colonnes: Id / Francais / Anglais, enfin tu vois le genre ^^

Et selon la langue actuel prendre telle ou telle colonne.... certes via xml c'est bien plus rapide le choix de la langue...

 

 

------------------------------------------------------------------------------------------------------------------------------------

edit:

bref j'ai une autre solution  qui prend en charge le xml...

Dans ton xml au lieu de faire que des items fait du genre:

<resources>
<string-array name="Question1"> // name of the string array
<item>Rep1</item> // items
<item>Rep2</item>
<item>Rep3</item>
<item>Rep4</item>
</string-array>
</resources>

exemple pour une question et tu recuperer comme ca:

String[] question1 = getResources().getStringArray(R.array.Question1);

Voila j'espère que cela t'aidera ;) 

Share this post


Link to post
Share on other sites

Solution intéressante mais je pense qu'elle prendra encore un peu trop de place.

J'ai trouvé une autre solution qui permet de résumé les 4000 lignes en une 10aine de lignes :

 

String id_question = "q" + numero_question2;
int q2 = res.getIdentifier(id_question, "string", "package");
final String q = getResources().getString(q2);

Share this post


Link to post
Share on other sites

C'est une bonne solution aussi.

Mais actuellement cette partie du code fait 15 lignes comparé au 5000 lignes que j'avais je suis assez satisfait.  :)

De plus le texte dans le fichier string s'adapte automatiquement à la langue ce qui évite du code supplémentaire.

Share this post


Link to post
Share on other sites





×
×
  • Create New...