Précédent   Forum des professionnels en informatique > Java > Général Java > Java & Mobiles > Android
Android Forum d'entraide sur Android, la plateforme mobile de Google pour téléphones portables et Smartphones. Avant de poster -> FAQ Android
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/02/2012, 15h05   #1
Invité de passage
 
Inscription : février 2012
Messages : 6
Détails du profil
Informations forums :
Inscription : février 2012
Messages : 6
Points : 1
Points : 1
Par défaut Représenter un algorigramme

Bonjour j' ecris ce message par désespoir, je commence a peine le developpement sur android donc j' ai un peu de mal à faire ce que je souhaite. J' espère pouvoir être aidé en postant sur ce forum.

Bref ce que j' aimerai faire c'est représenter un algorigramme étape par étape en proposant a chaque fois les réponses Oui/Non.Je ne sais pas si je suis très clair , peut etre qu' un schéma s'impose


Code :
1
2
3
4
5
6
7
 
 
                 Oui -----Question 1-----Non
                 |                         |
         -----Question 2-----    -----Question3-----
         |                  |    |                 |
    Question 4      Question 5  Question 6    Question 7
J' ai fait plusieurs essais par exemple avec des if/else if imbriqués mais j' ai du mal avec les listeners.
Peut-être faut-il créer un nouvelle activité a chaque fois ?

Pouvez-vous m' aider sur la bonne méthode a utiliser ?

D'avance, merci.
Kal-X est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 15h45   #2
Rédacteur/Modérateur
 
Avatar de MrDuChnok
 
Homme
Ingénieur développement logiciels
Inscription : juin 2002
Messages : 1 953
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : juin 2002
Messages : 1 953
Points : 3 474
Points : 3 474
Salut,

Afin de mieux te répondre, il faudrait que tu nous explique quelle étape est bloquante chez toi :
- l'algorithmie pour développer ta solution
- l'architecture à utiliser sur Android
- la graphisme / l'ergonomie de ton application
- une partie technique sur le développement (par exemple impossible "d'écouter" un clic sur un bouton).
- etc
__________________
Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum
MrDuChnok est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 16h03   #3
Invité de passage
 
Inscription : février 2012
Messages : 6
Détails du profil
Informations forums :
Inscription : février 2012
Messages : 6
Points : 1
Points : 1
Et bien mon problème est tout simplement la syntaxe a utiliser.
Comme je l' ai dit je suis parti d' une architecture avec des if/else if mais je ne pense pas avoir fait le bon choix et je pense devoir repartir de zéro.

Le programme affiche tout d' abord la première question, puis en fonction du bouton cliqué affiche la question suivante (Qui est donc différente si la réponse et "oui" ou si elle est "non") et recommence la même opération.

Comme je le disait je bloque essentiellement sur l'utilisation des listeners sur les boutons oui/non. J'avais pensé ne créer qu' un seul listener, mais il faudrait pouvoir faire un "reset" apres chaque condition pour que le bouton ne soit plus detecter comme cliqué, sinon les condition qui s'executent quand le bonton "oui" est cliqué sont toutes vraies au premier clic au lieu d'attendre un nouvel appui sur un bouton.
Ou alors il faudrait que dans chacune des conditions je mette un listener mais dans ce cas le code devient vite très lourd.

Pour donner une idée, voici le genre d' algorigramme que je souhaite représenter :

Kal-X est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 16h15   #4
Rédacteur/Modérateur
 
Avatar de MrDuChnok
 
Homme
Ingénieur développement logiciels
Inscription : juin 2002
Messages : 1 953
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : juin 2002
Messages : 1 953
Points : 3 474
Points : 3 474
En faite, il faut déjà commencer par le début et modéliser au mieux tes données.
Ici cela ressemble fortement à un Graphe.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
public interface Item {
}
public class Question implements Item{
   String mQuestion;
   Item mYes;
   Item mNo;
}
public class Reponse implements Item {
   String mReponse;
}
 
public class MesDonnees {
 
   public MesDonnees () {
        Reponse rep1 = new Reponse();
        rep1.mReponse = "Try drive in test PC";
 
        Reponse rep2 = new Reponse();
        rep2.mReponse = "Deffective power Supply...";
 
 
        Question qu1 = new Question();
        qu1.mQuestion = "Spin up on...";
        qu1.mYes = rep2;
        qu1.mNo = rep1;
 
        //etc... tu codes tes questions.
   }
 
}
Une fois des données modélisées, ça va vite pour faire ton interface.

on imagine que tu as un layout XML avec 1 zone de texte (lbTexte) et deux boutons (btOui et btNon).

Et voici ce que tu pourrais retrouver dans ton activité :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
 
public void init() {
    showQuestion(questionInitiale);
}
 
public void showQuestion(final Item aItem) {
   if (aItem instanceof Question) {
       lbTexte.setText((Question)aItem.mQuestion);
       btOui.setVisible(View.VISIBLE);
      btNon.setVisible(View.VISIBLE);
      btOui.setOnClickListener(new OnClickListener() {
         public void onClick() {
             //Le gars à cliqué sur oui, on passe à la question suivante : 
            showQuestion(aItem.mYes);
         }
 
      };
 
     btNon.setOnClickListener(new OnClickListener() {
         public void onClick() {
             //Le gars à cliqué sur oui, on passe à la question suivante : 
            showQuestion(aItem.mNo);
         }
 
      }
 
  } else {
      lbTexte.setText((Question)aItem.mQuestion);
      btOui.setVisible(View.GONE);
      btNon.setVisible(View.GONE);
  }
 
}
Le code est réduit à son minimum mais te présente un trame pour débuter. Il y a beaucoup d'optimisation à faire, y'a pas mal de trucs à revoir, mais te donne un point de vue pour comprendre un peu comment tu pourrais implémenter ça.

[edit : Le code est pas compilable, je l'ai écris à la volé ici, donc t'amuse pas à faire copier coller ]
__________________
Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum
MrDuChnok est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/02/2012, 16h22   #5
Invité de passage
 
Inscription : février 2012
Messages : 6
Détails du profil
Informations forums :
Inscription : février 2012
Messages : 6
Points : 1
Points : 1
Merci beaucoup de ta réponse claire et rapide.

Je vais essayer de mettre en place tes conseils pour voir ce que ça donne. Je tiendrai au courrant de mon avancement.

Encore merci et a plus tard.

Edit : Re, je suis en train d' experimenter ce que tu m' a proposé mais bute sur quelques obstacles. (Je débute tout juste et je ne saisi pas vraiment tout)

Tout d' abord voila ou j' en suis :

- J' ai une interface Item
- Une classe Question
- Une classe Reponse
- Une classe MesDonnees
- Et bien sur ma classe principale
- J' ai recopié ton code en modifiant le nom de mes vues après les avoir déclarées

Mes problèmes se posent au niveau de ma classe main.
Tout d' abord, tu as ecrit :

btOui.setVisible(View.GONE);
btNon.setVisible(View.GONE);

Je suppose que tu voulais dire :

boutonOui.setVisibility(View.GONE);
boutonNon.setVisibility(View.GONE); ?

Puisque apparement la methode setVisible n' est pas definie pour les Button.
Ensuite quelques erreurs se présentent a moi et j' ai un peu de mal a tout comprendre.
par exemple :
Citation:
The method setText(CharSequence) in the type TextView is not applicable for the arguments (Question)
Citation:
mQuestion cannot be resolved or is not a field
Pourrais-tu m' éclaircir ?
Merci
Kal-X est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 22h11   #6
Invité de passage
 
Inscription : février 2012
Messages : 6
Détails du profil
Informations forums :
Inscription : février 2012
Messages : 6
Points : 1
Points : 1
Re,
J' ai un peu avancé, fait quelques correction dans ton code (peut-être fausses).
Voici le contenu de mon main :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
package com.depannage.laptop;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
 
public class main extends Activity {
 
	TextView question = (TextView)findViewById(R.id.question);
	Button boutonOui = (Button)findViewById(R.id.boutonOui);
	Button boutonNon = (Button)findViewById(R.id.boutonNon);
 
public void showQuestion(final Question aItem) {
   if (aItem instanceof Question) {
 
       question.setText(aItem.mQuestion);
       boutonOui.setVisibility(View.VISIBLE);
       boutonNon.setVisibility(View.VISIBLE);
       boutonOui.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {
             //Le gars à cliqué sur oui, on passe à la question suivante : 
            showQuestion((Question) aItem.mYes);
         }
 
      });
 
     boutonNon.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {
             //Le gars à cliqué sur oui, on passe à la question suivante : 
            showQuestion((Question) aItem.mNo);
         }
 
      });
 
  } else {
      question.setText(aItem.mQuestion);
      boutonOui.setVisibility(View.GONE);
      boutonNon.setVisibility(View.GONE);
  }
 
}
 
}
Il me manque l' ajout de la question initiale mais j' ai du mal a comprendre comment faire. Je ne sais pas si j' ai bien fait de modifier certaines chose dans ton code mais du coup j' ai du mal a comprendre l'utilité de l'interface Item.
En fait je ne connais pas le concept d' interface, ni son utilité. Pourrais-tu m'aider a corriger ce qui ne va pas ?

Merci
Kal-X est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 09h38   #7
Rédacteur/Modérateur
 
Avatar de MrDuChnok
 
Homme
Ingénieur développement logiciels
Inscription : juin 2002
Messages : 1 953
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : juin 2002
Messages : 1 953
Points : 3 474
Points : 3 474
Ici l'interface que j'ai utilisé est très pauvre et me permet uniquement de typer mes objets.
Dans ton graphe, tu as deux types d'objets de ce que j'ai pu voir :
- des questions (avec un intitulé et deux réponses menant à deux issues)
- une réponse finale (qui termine le questionnaire).

Donc quand tu as une question, si tu réponds oui, tu peux soit tombé sur une nouvelle question, soit sur ta réponse. Donc les "fils" d'une question, sont soient une question, soit une réponse, donc un objet de type "Item" (vu que les objets Question et Reponse implémentent cette interface).

Pour la question initiale, il faut que tu es déjà initialisé en entière ton graphe de question. Je t'ai donnée un exemple de comment initialiser le tout en "dur", mais tu peux très bien imaginer décrire ton arbre dans un fichier xml, puis le parser pour initialiser le tout, histoire d'un un peu plus générique sur ton algo.
__________________
Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum
MrDuChnok est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 18h05   #8
Invité de passage
 
Inscription : février 2012
Messages : 6
Détails du profil
Informations forums :
Inscription : février 2012
Messages : 6
Points : 1
Points : 1
Merci beaucoup de ta réponse même si ce n'est pas vraiment ce que j' attendais.
Bref j'ai réfléchi et ai trouvé les informations que je cherchais.
J' ai repris le code a zéro. Voici le main :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
package com.depannage.laptop;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
 
public class Main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
    }
 
        public void showQuestion (final Item aItem){
        	TextView question = (TextView)findViewById(R.id.question);
            Button boutonOui = (Button)findViewById(R.id.boutonOui);
            Button boutonNon = (Button)findViewById(R.id.boutonNon);
 
        	if (aItem instanceof Question){
 
				question.setText(((Question) aItem).mQuestion);
				boutonOui.setVisibility(View.VISIBLE);
				boutonNon.setVisibility(View.VISIBLE);
 
				boutonOui.setOnClickListener(new OnClickListener() {
 
					public void onClick(View v) {
						showQuestion(((Question) aItem).mYes);						
					}
				});
 
				boutonNon.setOnClickListener(new OnClickListener() {
 
					public void onClick(View v) {
						showQuestion(((Question) aItem).mNo);
					}
				});
        	}
        	else {
        		question.setText(((Reponse) aItem).mReponse);
        		boutonOui.setVisibility(View.GONE);
        		boutonNon.setVisibility(View.GONE);
        	}
        }
    }
Mes données se trouvent dans une classe Donnees que voici (les données sont bidon c'est juste pour l' exemple):

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
package com.depannage.laptop;
 
public class Donnees {
 
	public Donnees(){
		 	Question qdebutNon = new Question();
	        qdebutNon.mQuestion = "Question Non";
 
	        Question qdebutOui = new Question();
	        qdebutOui.mQuestion = "Question Oui";
	        qdebutOui.mNo = qdebutNon;
 
	        Question qdebut = new Question();
	        qdebut.mQuestion = "Essai";
	        qdebut.mYes = qdebutOui;
	        qdebut.mNo = qdebutNon;
	}
 
}
Mon problème se pose au niveau de l' accès aux données dans le main. Je ne sait pas comment m' y prendre. Si je créé mes objets Question dirrectement dans le main, pas de problème. Mais là j' ai essayé de différente façons et je n' y arrive pas. Pourtant je suis sûr que c'est tout con.
Kal-X est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 11h13   #9
Rédacteur/Modérateur
 
Avatar de MrDuChnok
 
Homme
Ingénieur développement logiciels
Inscription : juin 2002
Messages : 1 953
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : juin 2002
Messages : 1 953
Points : 3 474
Points : 3 474
Si je reprend le premire code que je t'ai donnée, tu peux par exemple faire ça comme ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public interface Item {
}
public class Question implements Item{
   String mQuestion;
   Item mYes;
   Item mNo;
}
public class Reponse implements Item {
   String mReponse;
}
 
public class MesDonnees {
 
   private Question mPremiereQuestion;
 
   public MesDonnees () {
        Reponse rep1 = new Reponse();
        rep1.mReponse = "Try drive in test PC";
 
        Reponse rep2 = new Reponse();
        rep2.mReponse = "Deffective power Supply...";
 
 
        Question qu1 = new Question();
        qu1.mQuestion = "Spin up on...";
        qu1.mYes = rep2;
        qu1.mNo = rep1;
 
        //etc... tu codes tes questions.
 
       mPremiereQuestion = qu1;
   }
 
  public Question getPremiereQuestion() {
    return mPremiereQuestion ;
  }
 
}
Et du coup dans ton activité :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
 
public class monActivite extend Activity {
 
    MesDonnees mDonnees;
 
    public void onCreate(...) {
   //    .....
 
      mDonnees = new MesDonnees();
      showQuestion(mDonnees.getPremiereQuestion());
 
     }
 
}
__________________
Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum
MrDuChnok est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/02/2012, 11h31   #10
Invité de passage
 
Inscription : février 2012
Messages : 6
Détails du profil
Informations forums :
Inscription : février 2012
Messages : 6
Points : 1
Points : 1
Super merci,

en fait je suis passé juste a côté, Soit j' instanciait un objet Données dans le Main sans créer l' accesseur, soit je faisait l' inverse.

Mais où ai-je la tête

En tout cas merci encore de ton aide je pense que là j' ai tout ce qu'il me faut pour la suite.
Kal-X est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h08.


 
 
 
 
Partenaires

Hébergement Web