Probleme java: "return"

Fermé
Aaymeric Messages postés 78 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 7 octobre 2018 - 29 sept. 2011 à 21:36
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 30 sept. 2011 à 06:29
Bonjour,
Je suis en 1ère année en informatique et je dois créer un simple programme.
Mon programme doit se terminer avec un return mais je ne sais pas quelle valeur, variable je dois lui attribuer (je ne maitrise pas encore tous les termes :s ). Pouvez me dire laquelle et pourquoi ? Voici mon code:

public class AfficheResultat{

public static java.util.Scanner scanner = new java.util.Scanner(System.in);

public static void main(String[] args) {
System.out.println("Entrez la moyenne de l'étudiant sur 100: ");
double moyenneEtudiant = scanner.nextDouble();
String resultatAAfficher = resultat(moyenneEtudiant);
System.out.println(resultatAAfficher);
}

public static String resultat(double moyenne){
if(moyenne < 12)
System.out.println ("L'étudiant est refusé");
else if(12 <= moyenne && moyenne < 14)
System.out.println ("L'étudiant a satisfait");
else if(14 <= moyenne && moyenne < 16)
System.out.println("L'étudiant a mérité une distinction");
else if(moyenne > 16)
System.out.println("L'étudiant a mérité une grande distinction");
return ????;

Merci
A voir également:

4 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
29 sept. 2011 à 21:56
Ici il y a deux manières de voir le problème, soit tu fais l'affichage dans la méthode et tu te retrouves dans le cas où tu n'as pas besoin de renvoyer de valeur. Il te suffit donc de mettre le type void comme type de retour et d'enlever le return.

public static void resultat(double moyenne)
{
    if(moyenne < 12)
        System.out.println ("L'étudiant est refusé");
    else if(12 <= moyenne && moyenne < 14)
        System.out.println ("L'étudiant a satisfait");
    else if(14 <= moyenne && moyenne < 16)
        System.out.println("L'étudiant a mérité une distinction");
    else if(moyenne > 16)
        System.out.println("L'étudiant a mérité une grande distinction");
}

Une autre façon de voir le problème, ce qui correspond d'ailleurs à ton main, est qu'au lieu d'afficher le résultat dans la méthode, tu renvoie le String à afficher :

public static String resultat(double moyenne)
{
    if(moyenne < 12)
        return "L'étudiant est refusé";
    else if(12 <= moyenne && moyenne < 14)
        return "L'étudiant a satisfait";
    else if(14 <= moyenne && moyenne < 16)
        return "L'étudiant a mérité une distinction";
    else if(moyenne > 16)
        return "L'étudiant a mérité une grande distinction";
}

Remarque qui n'a rien à voir avec ton problème : tu peux rajouter le mot clé final à ton objet scanner, mais puisque tu débutes tu ne vois peut-être pas l'intérêt ;-)
0
Aaymeric Messages postés 78 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 7 octobre 2018
29 sept. 2011 à 22:05
Je comprend pas ce que tu essayes de m'expliquer :s
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
29 sept. 2011 à 22:11
Ce que tu veux faire c'est l'affichage du resultat. Donc au choix :
1) tu fais tous les affichage dans la méthode (avec des System.out.println un peu partout) et dans ce cas il n'y a aucun résultat à renvoyer, et le System.out.println(resultatAAfficher) n'a aucun sens vu que l'affichage est déjà fait par la méthode
2) tu renvoie en résultat de la méthode le commentaire sur la note (un String) qui sera affiché par ton main, et dans ce cas il faut enlever tous les System.out.println de la méthode vu que c'est le main qui s'occupera de l'affichage.
0
Aaymeric Messages postés 78 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 7 octobre 2018
29 sept. 2011 à 22:10
Par contre, ce que je ne comprend pas, c'est qu'a la fin j'avais mis
return "mon texte"; et ca ne fonctionnait pas or maintenant oui.

Maintenant je ne comprend pas très bien le return, ou plutot, comment l'utiliser. Car la je me dis qu'il sert a renvoyer la lecture du code a un endroit du code et maintenant je comprend aussi qu'il permet d'afficher une phrase comme System.out..... :s
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
29 sept. 2011 à 22:19
De manière général, le return permet de déterminer quelle valeur renvoie ta méthode avec les paramètres que tu lui as passé.

Quand tu fais String resultatAAfficher = resultat(moyenneEtudiant); par exemple
La valeur du resultatAAfficher correspondra au return dans la méthode resultat.
C'est pour ça que vu qu'après tu fais System.out.println(resultatAAfficher), il est inutile de faire des affichages à l'intérieur de la méthode (on est dans le cas 2). Alors que si au contraire tu considère que c'est la méthode qui doit faire l'affichage (cas 1), tu n'as plus besoin du resultatAAfficher, donc tu n'as plus besoin du return.
0
Aaymeric Messages postés 78 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 7 octobre 2018
29 sept. 2011 à 22:16
Et si je veux renvoyer au scanner pour directement réessayer mon programme, je fais comment ?
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
29 sept. 2011 à 22:21
Renvoyer quoi au scanner ? Tu veux dire boucler pour recommencer le programme ?
Tu peux encadrer le code de ton main par une boucle while par exemple :

public static void main(String...args) 
{
    while(true)
    {
         System.out.print("Entrez la moyenne de l'étudiant sur 100 : ");
         double moyenneEtudiant = scanner.nextDouble();
         
         // cas 1 :
         resultat(moyenneEtudiant);
         
         // cas 2 :
         resultatAAfficher = resultat(moyenneEtudiant);
         System.out.println(resultatAAfficher);
    }
}
0
Aaymeric Messages postés 78 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 7 octobre 2018
29 sept. 2011 à 22:28
Pourquoi le While(true) ? et les "()" sont elles importants ? Car elles paraissent en noir dans mon éditeur jgrasp
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
29 sept. 2011 à 22:34
Je ne connais pas jgrasp alors je ne sais pas ce que signifie pour lui qu'elles soient en noir.
Le while(true) c'est au cas où tu veuilles recommencer autant de fois que tu veux la saisie sans avoir à redémarrer le programme (je crois que c'est ce que tu voulais)
Les parenthèses font parti de la syntaxe, elles permettent, comme les accolades ou les crochets, de différencier les différents blocs et savoir et connaître la portée des instructions.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
29 sept. 2011 à 22:38
Remarque : il est possible que jgrasp mettent en noir les parenthèses, les accolades et les crochets uniquement pour que tu puisses repérer où s'ouvre et se ferme le bloc.
Par exemple tu fermes une parenthèse, il t'indique en noir la parenthèse que tu viens de fermer, et la parenthèse ouvrante correspondante.
0
Aaymeric Messages postés 78 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 7 octobre 2018
29 sept. 2011 à 22:41
Et comment je fais le "égale ou plus grand que" en symbole. Moi j'aurai mis: else if(moyenne => 16) mais le java n'accepte pas
0