Récupération de valeur en fin de méthode.
Bonjour à tous,
Je suis en train de travailler sur un petit programme très simple en mode console. Dans celui-ci, j'ai crée des méthodes (sur le même fichier source que la méthode main donc) me permettant d'effectuer une opération. J'aurai voulu simplement savoir comment je pouvais récupérer le résultat de cette opération.
Dans le même domaine, j'aurai voulu savoir comment récupérer un temps par la même occasion, car l'opération en question est chronomètrée.
Un grand merci à celui ou celle qui pourra me venir en aide.
Cordialement.
Java_doc ;)
Récupérer plusieurs valeurs
Pour la 2eme partie: "Récupérer temps+valeur"
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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| import java.util.Scanner;
public class Test {
// Méthode level_1 : premier niveau de difficulté
public static Object[] level_1 () {
byte nbr1, nbr2 = 0;
// initialisation du "chrono".
long second = 0;
long somme = 0;
boolean resultat = false;
Scanner valeurEntree = new Scanner(System.in);
// Génération de deux nombres entiers aléatoires
nbr1 = (byte) (Math.random() * -128 + 127);
nbr2 = (byte) (Math.random() * -128 + 127);
System.out.printf("\tCombien font %3d + %3d ? ", nbr1, nbr2);
//demarrage chrono
long start = System.nanoTime();
somme = valeurEntree.nextInt();
// Arrêt du chrono.
long nsecond = System.nanoTime() - start;
// Transformation des nano secondes en secondes.
//j'ai enlevé un 0
second = nsecond / 100000000;
if (somme == nbr1 + nbr2) {
resultat = true;
}else{
resultat = false;
}
return new Object[]{new Boolean(resultat),new Long(second)};
}
// Méthode principale
public static void main (String [] args) {
System.out.println("Début - Exécution Test.java\n");
byte ind_niv = 1;
Object[] resultat=null;
// Boucle pour répéter l'opération tant que le niveau 5 n'est pas atteint.
while (ind_niv <= 5) {
// Evolution du niveau de difficulté en fonction des réponses
switch (ind_niv) {
case 1:
resultat=level_1 ();
break;
// J'ai effacé les autres niveaux par soucis de clarté...imaginer la même chose jusque 5.
default:
break;
}
if(resultat!=null){
System.out.print(resultat[0]);
// Condition pour l'affichage d'un message en fonction de la réponse et incrémentation du niveau.
if ( ((Boolean)resultat[0]) ) {
System.out.println("Gagné en "+(((Long)resultat[1])/10.0));
ind_niv++;
}else{
System.out.println("Perdu...");
}
}
// Affichage du résultat de la méthode addition
}
System.out.println("\nFin - Exécution Test.java");
}
} |
Comme tu peux le constater, je ne renvoie plus un boolean mais un tableau d'objet.
La classe Objet est la classe générique que tout objet java hérite.
"boolean" n'est pas une classe, mais "Boolean" en est une.
Pour "Long" essaye de modifier ta fonction level pour renvoyer "long".
Si tu ne souhaite juste afficher, pas de probleme.
Si tu souhaites diviser la valeurs par 10 afin d'avoir un chiffre après la virgule, ça ne passe pas.
Il existe d'autres possibilités:
a)Créer une classe "ResultLevel" qui contiendrait une variable de classe de type "boolean" (pas besoin de Boolean) et une autre variable de type "long".
A ce moment là, tes méthodes "level*" renverrait non plus un Object[] mais un "ResultLevel". Cela serait plus lisible, surtout si tu commences a avoir plus de 2/3 parametres.
b) Cette même classe serait passée en parametre des méthodes "level", et c'est la méthode "level" qui affecterait les valeurs.
c) La méthode "level" est dans une classe Level.
Depuis le main:
Code:
1 2 3 4 5 6 7 8 9 10
|
int diffuculte=1;
...
Niveau level = new Niveau(difficulte);
level.Jouer();//avant c'était ta méthode level
if(level.getSucces()){
Long nbSec=level.getTempsReponse();
//...
}else{
... |
...
Cordialement,