Questions débutant
Fermé
WhiteT1ger
Messages postés
23
Date d'inscription
dimanche 5 octobre 2014
Statut
Membre
Dernière intervention
29 décembre 2015
-
Modifié par KX le 5/10/2014 à 14:10
WhiteT1ger Messages postés 23 Date d'inscription dimanche 5 octobre 2014 Statut Membre Dernière intervention 29 décembre 2015 - 24 déc. 2014 à 21:58
WhiteT1ger Messages postés 23 Date d'inscription dimanche 5 octobre 2014 Statut Membre Dernière intervention 29 décembre 2015 - 24 déc. 2014 à 21:58
A voir également:
- Questions débutant
- Logiciel de programmation pour débutant - Guide
- Logiciel montage vidéo débutant - Guide
- Cours d'infographie pour debutant - Forum Graphisme
- Apprendre le coran pour débutant (+ pdf) - Télécharger - Histoire & Religion
- Cours de solfège débutant gratuit - Télécharger - Création musicale
8 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
5 oct. 2014 à 14:22
5 oct. 2014 à 14:22
Bonjour,
Effectivement c'est une question qui revient souvent, mais rare sont ceux qui trouvent la solution tout seul ;)
En fait c'est un cas particulier lié à l'utilisation de System.in et du clavier en général.
Le problème c'est que nextInt s'arrête au premier caractère qui n'est pas un chiffre or en appuyant sur la touche Entrée tu as rajouter un "\r\n".
C'est pour cela qu'il faut un nextLine() pour lire ce "\r\n" avant de faire un seconde nextLine() qui concerne vraiment la ligne suivante à lire.
Cela signifie aussi, que tu pourrais faire plusieurs lectures sur la même ligne.
Par exemple si je saisis sur une seule ligne : 123 456 toto, je pourrais tout récupérer d'un coup :
Effectivement c'est une question qui revient souvent, mais rare sont ceux qui trouvent la solution tout seul ;)
En fait c'est un cas particulier lié à l'utilisation de System.in et du clavier en général.
Le problème c'est que nextInt s'arrête au premier caractère qui n'est pas un chiffre or en appuyant sur la touche Entrée tu as rajouter un "\r\n".
C'est pour cela qu'il faut un nextLine() pour lire ce "\r\n" avant de faire un seconde nextLine() qui concerne vraiment la ligne suivante à lire.
Cela signifie aussi, que tu pourrais faire plusieurs lectures sur la même ligne.
Par exemple si je saisis sur une seule ligne : 123 456 toto, je pourrais tout récupérer d'un coup :
int a = sc.nextInt(); int b = sc.nextInt(); Strinc c = nextLine();
WhiteT1ger
Messages postés
23
Date d'inscription
dimanche 5 octobre 2014
Statut
Membre
Dernière intervention
29 décembre 2015
1
5 oct. 2014 à 16:39
5 oct. 2014 à 16:39
Bonjour KX,
Merci d'avoir répondu.
Je réfléchis à ta réponse. Entre-temps, je me demande comment effectuer une ligne de texte contenant plusieurs variables.
Je voudrais faire par exemple : L'étudiant Durand a obtenu 12 en maths.
Cette syntaxe que j'ai voulu utiliser ne marche pas :
Elle est tirée du code suivant :
Merci encore !
Merci d'avoir répondu.
Je réfléchis à ta réponse. Entre-temps, je me demande comment effectuer une ligne de texte contenant plusieurs variables.
Je voudrais faire par exemple : L'étudiant Durand a obtenu 12 en maths.
Cette syntaxe que j'ai voulu utiliser ne marche pas :
System.out.print("L'étudiant " + leNom, "a obtenu " + noteMaths, "en mathématiques.");
Elle est tirée du code suivant :
import java.util.Scanner;
public class Constructeur {
public static void main(String[] args) {
/* L'objectif est de créer un programme répertoriant
* les différentes notes d'un étudiant, et qui donnera
* une moyenne et un résultat concernant les résultats
* d'admission.
*/
System.out.print("--- Informations concernant l'étudiant ---\n");
Scanner sc = new Scanner(System.in);
System.out.print("Nom de l'étudiant ? ");
String leNom = sc.nextLine();
System.out.print("Maths : ");
sc.nextInt();
int noteMaths = sc.nextInt();
System.out.print("L'étudiant " + leNom, "a obtenu " + noteMaths, "en mathématiques.");
// TODO Auto-generated method stub
}
}
Merci encore !
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
5 oct. 2014 à 16:56
5 oct. 2014 à 16:56
Tu peux tout simplement continuer la concaténation comme tu l'as commencé :
System.out.print("L'étudiant " + leNom + "a obtenu " + noteMaths + "en mathématiques.");
WhiteT1ger
Messages postés
23
Date d'inscription
dimanche 5 octobre 2014
Statut
Membre
Dernière intervention
29 décembre 2015
1
7 oct. 2014 à 21:25
7 oct. 2014 à 21:25
Bonsoir KX,
Merci pour le print.
Par contre, après que j'aie tapé le nom et la note de maths, la dernière phrase ne s'affiche pas (l'étudiant untel a obtenu la note xx)...?
Aussi, sais tu comment supprimer le soulignage des mots dans les commentaires, c'est très agaçant ?
Merci,
Merci pour le print.
Par contre, après que j'aie tapé le nom et la note de maths, la dernière phrase ne s'affiche pas (l'étudiant untel a obtenu la note xx)...?
Aussi, sais tu comment supprimer le soulignage des mots dans les commentaires, c'est très agaçant ?
Merci,
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
7 oct. 2014 à 21:30
7 oct. 2014 à 21:30
"comment supprimer le soulignage des mots dans les commentaires"
Écris les en anglais :-)
Sinon en passant ta souris au dessus d'un mot souligné tu dois avoir "Disable spell check"
la dernière phrase ne s'affiche pas
Si c'est toujours le même code, tu as deux nextInt, il faut donc taper deux valeurs (ou en supprimer un des deux) avant que la ligne ne s'affiche.
Écris les en anglais :-)
Sinon en passant ta souris au dessus d'un mot souligné tu dois avoir "Disable spell check"
la dernière phrase ne s'affiche pas
Si c'est toujours le même code, tu as deux nextInt, il faut donc taper deux valeurs (ou en supprimer un des deux) avant que la ligne ne s'affiche.
WhiteT1ger
Messages postés
23
Date d'inscription
dimanche 5 octobre 2014
Statut
Membre
Dernière intervention
29 décembre 2015
1
Modifié par WhiteT1ger le 8/10/2014 à 16:03
Modifié par WhiteT1ger le 8/10/2014 à 16:03
Re,
Merci, ca a marché :D
Ultérieurement, je voudrais bien rajouter des notes, puis permettre à l'utilisateur de recommencer; mais on verra ça plus tard.
En ce moment je bosse sur plusieurs projets différents, certains étant plus urgents que d'autres, je suis obligé de les faire passer en premier.
Donc voici encore un projet où j'ai fait appel à des constructeurs. Je ne comprends pas pourquoi le programme ne veut pas lancer ma petite phrase avec les paramètres que j'ai associés au constructeur.
Les deux fichiers:
https://www.cjoint.com/?0JiqfN55lRV
Il y a toujours solution à tout.
Merci, ca a marché :D
Ultérieurement, je voudrais bien rajouter des notes, puis permettre à l'utilisateur de recommencer; mais on verra ça plus tard.
En ce moment je bosse sur plusieurs projets différents, certains étant plus urgents que d'autres, je suis obligé de les faire passer en premier.
Donc voici encore un projet où j'ai fait appel à des constructeurs. Je ne comprends pas pourquoi le programme ne veut pas lancer ma petite phrase avec les paramètres que j'ai associés au constructeur.
Les deux fichiers:
https://www.cjoint.com/?0JiqfN55lRV
Il y a toujours solution à tout.
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
8 oct. 2014 à 19:28
8 oct. 2014 à 19:28
Évites de poster du code ailleurs que sur CCM ce n'est pas pratique, en plus pour deux classes à copier-coller ce n'est pas ça qui va alourdir la page...
Tu as écrit :
Il y a évidemment un problème au tout début, Eclipse te le souligne d'ailleurs en rouge, l'opérateur + est binaire, il requiert d'avoir un opérande à gauche et un opérande à droite, ici tu n'as rien à gauche, forcément ça ne peut pas compiler.
Il faudrait écrire :
Cela t'afficheras donc :
Le null vient de la valeur par défaut de tes attributs privés, car ils ont été mal initialisés dans le constructeur.
Il fallait faire l'inverse :
Ce qui donne :
Tu as écrit :
System.out.println(+paris1.getNomVille()+"est une ville de "+paris1.getNomPays()+"contenant plus de"+paris1.getNbHabitants()+"habitants.");
Il y a évidemment un problème au tout début, Eclipse te le souligne d'ailleurs en rouge, l'opérateur + est binaire, il requiert d'avoir un opérande à gauche et un opérande à droite, ici tu n'as rien à gauche, forcément ça ne peut pas compiler.
Il faudrait écrire :
System.out.println(paris1.getNomVille()+"est une ville de "+paris1.getNomPays()+"contenant plus de"+paris1.getNbHabitants()+"habitants.");
Cela t'afficheras donc :
Création d'une ville :
nullest une ville de nullcontenant plus de0habitants.
Le null vient de la valeur par défaut de tes attributs privés, car ils ont été mal initialisés dans le constructeur.
private String nomVille; // null par défaut private String nomPays; // null par défaut private int nbHabitants; // null par défaut public Ville(String pNomVille, String pNomPays, int pNbHabitants) { pNomVille = nomVille; pNomPays = nomPays; pNbHabitants = nbHabitants; }
Il fallait faire l'inverse :
public Ville(String pNomVille, String pNomPays, int pNbHabitants) { nomVille = pNomVille; nomPays = pNomPays; nbHabitants = pNbHabitants; }
Ce qui donne :
Création d'une ville :
Parisest une ville de Francecontenant plus de1000habitants.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
WhiteT1ger
Messages postés
23
Date d'inscription
dimanche 5 octobre 2014
Statut
Membre
Dernière intervention
29 décembre 2015
1
29 oct. 2014 à 22:10
29 oct. 2014 à 22:10
Bonsoir !
De retour, les études continuent, nouveau sujet !
Donc ici l'objectif est de demander à l'utilisateur de rentrer une phrase, de séparer cette phrase en tokens, puis de les insérer dans une ArrayList. Actuellement, je rage sur mon code qui ne fait que le précédent exercice, c'est à dire afficher la phrase mot après mot.
Le code:
La classe de test :
Merci encore !
De retour, les études continuent, nouveau sujet !
Donc ici l'objectif est de demander à l'utilisateur de rentrer une phrase, de séparer cette phrase en tokens, puis de les insérer dans une ArrayList. Actuellement, je rage sur mon code qui ne fait que le précédent exercice, c'est à dire afficher la phrase mot après mot.
Le code:
import java.util.*;
public class StringSentence {
private String sentence;
private ArrayList <String> words;
public StringSentence(){
sentence = InputValue.readString("What chu say yo ? ");
words = new ArrayList <String> ();
}
public StringSentence(String sentence){
this.sentence = sentence;
words = new ArrayList <String> ();
}
/* Call the StringTokenizer. hasMoreTokens is boolean, give true is there
* are other words. We store the next word into word variable, then print it.
*/
public void extractWords(){
StringTokenizer mySent = new StringTokenizer(sentence);
while (mySent.hasMoreTokens()){
String word = mySent.nextToken();
if (!words.contains(word)){
words.add(word);
}
System.out.println(word);
}
}
public String toString(){
return "Here what chu chose : " +sentence+ " AND THE ARRAAAY " +words.toString();
}
La classe de test :
import java.util.*;
public class TestStringSentence {
public static void main(String[] args) {
//It is possible to print the variable content directly calling the variable.
String phrase = InputValue.readString("What chu say ? ");
//We call the StringSentence constructor, and give the phrase variable
//which he will store at sentence variable in StringSentence class.
StringSentence jeDis = new StringSentence (phrase);
jeDis.extractWords();
Merci encore !
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
29 oct. 2014 à 22:42
29 oct. 2014 à 22:42
Bonsoir,
Qu'est-ce que la InputValue.readString ? Si ça fait une entrée au clavier ça n'a rien à faire dans un constructeur, donc gardes uniquement le deuxième constructeur de StringSentence.
Dans le même genre, extractWords ne devrait pas faire d'affichage, mais renvoyer le résultat avec un return. Les intéractions entre le programme et l'utilisateur c'est uniquement avec la classe de test, tout le reste doit être autonome.
Cependant je ne vois pas l'intérêt de faire une classe pour cela, tu devrais plutôt faire une méthode static qui prendrait en entrée ce que tu passes actuellement à ton constructeur, et en sortie le résultat de extractWords. Conserver les objets sentence et words serait inutile, voire même faux si on considère que tu pourrais faire deux appels successifs à extractWords...
Enfin, pour le coeur du problème (même si l'enrobage est déjà bien bancale), tu ne devrais pas utiliser StringTokenizer, c'est du vieux code Java 1, et comme beaucoup d'autres classes de cette génération il vaut mieux l'éviter complètement. Regarde la documentation c'est assez explicite !
https://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html
Qu'est-ce que la InputValue.readString ? Si ça fait une entrée au clavier ça n'a rien à faire dans un constructeur, donc gardes uniquement le deuxième constructeur de StringSentence.
Dans le même genre, extractWords ne devrait pas faire d'affichage, mais renvoyer le résultat avec un return. Les intéractions entre le programme et l'utilisateur c'est uniquement avec la classe de test, tout le reste doit être autonome.
Cependant je ne vois pas l'intérêt de faire une classe pour cela, tu devrais plutôt faire une méthode static qui prendrait en entrée ce que tu passes actuellement à ton constructeur, et en sortie le résultat de extractWords. Conserver les objets sentence et words serait inutile, voire même faux si on considère que tu pourrais faire deux appels successifs à extractWords...
Enfin, pour le coeur du problème (même si l'enrobage est déjà bien bancale), tu ne devrais pas utiliser StringTokenizer, c'est du vieux code Java 1, et comme beaucoup d'autres classes de cette génération il vaut mieux l'éviter complètement. Regarde la documentation c'est assez explicite !
https://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html
StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.
WhiteT1ger
Messages postés
23
Date d'inscription
dimanche 5 octobre 2014
Statut
Membre
Dernière intervention
29 décembre 2015
1
29 oct. 2014 à 23:04
29 oct. 2014 à 23:04
Bonsoir,
InputValue est une classe que nous implémentons qui permet simplement d'entrer du texte et de le stocker dans une variable.
Je dois faire avec les éléments que l'on me donne en cours, même si certains sont "outadated", malheureusement.
On m'a dit de toujours implémenter un constructeur sans paramètres, d'où le constructeur avec texte.
Quoi qu'il en soit, j'ai réussi à obtenir ce que je voulais. Mais je suis curieux de savoir ce que voulais tu que je fasses avec la méthode static, même si ce n'est pas totalement urgent.
Et la classe Test :
Et comment fais tu pour faire de jolies fenêtres de code ? Histoire que ce soit plus sympa pour nous deux lorsque je posterai dorénavant du code...
Merci,
InputValue est une classe que nous implémentons qui permet simplement d'entrer du texte et de le stocker dans une variable.
Je dois faire avec les éléments que l'on me donne en cours, même si certains sont "outadated", malheureusement.
On m'a dit de toujours implémenter un constructeur sans paramètres, d'où le constructeur avec texte.
Quoi qu'il en soit, j'ai réussi à obtenir ce que je voulais. Mais je suis curieux de savoir ce que voulais tu que je fasses avec la méthode static, même si ce n'est pas totalement urgent.
import java.util.*;
public class StringSentence {
private String sentence;
private ArrayList <String> words;
public StringSentence(){
sentence = InputValue.readString("What chu say yo ? ");
words = new ArrayList <String> ();
}
public StringSentence(String sentence){
this.sentence = sentence;
words = new ArrayList <String> ();
}
/* Call the StringTokenizer. hasMoreTokens is boolean, give true is there
* are other words. We store the next word into word variable, then print it.
*/
public void extractWords(){
StringTokenizer mySent = new StringTokenizer(sentence);
while (mySent.hasMoreTokens()){
String word = mySent.nextToken();
if (!words.contains(word)){
words.add(word);
}
}
}
public String toString(){
return "Here what chu chose : " +sentence+ " \nAnd the array :\n" +words.toString();
}
Et la classe Test :
import java.util.*;
public class TestStringSentence {
public static void main(String[] args) {
//It is possible to print the variable content directly calling the variable.
String phrase = InputValue.readString("What chu say ? ");
StringSentence jeDis = new StringSentence (phrase);
jeDis.extractWords();
System.out.println(jeDis);
Et comment fais tu pour faire de jolies fenêtres de code ? Histoire que ce soit plus sympa pour nous deux lorsque je posterai dorénavant du code...
Merci,
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
29 oct. 2014 à 23:53
29 oct. 2014 à 23:53
"On m'a dit de toujours implémenter un constructeur sans paramètres"
Mais dans ce cas tu devrais donner aucune valeur à sentence ou alors une valeur par défaut (null, "", etc.) mais en aucun cas solliciter l'utilisateur. Pour remplir la valeur après une initialisation avec le constructeur vide il faudrait appeler un setteur pour remplir la valeur (que tu n'as pas...)
"je suis curieux de savoir ce que voulais tu que je fasses avec la méthode static"
Actuellement ton code de test c'est ça :
Éventuellement avec un constructeur par défaut ça donnerait ceci :
Avec une méthode static tu aurais ceci :
En effet, l'objet
Conceptuellement, c'est la même chose que ce que tu as fait avec StringSentence...
Mais c'est moche !
"comment fais tu pour faire de jolies fenêtres de code ?"
Tu peux sélectionner un langage spécifique lorsque tu mets les balises de codes :
Tu peux aussi le faire manuellement, en mettant <code java> ... </code>
Mais dans ce cas tu devrais donner aucune valeur à sentence ou alors une valeur par défaut (null, "", etc.) mais en aucun cas solliciter l'utilisateur. Pour remplir la valeur après une initialisation avec le constructeur vide il faudrait appeler un setteur pour remplir la valeur (que tu n'as pas...)
"je suis curieux de savoir ce que voulais tu que je fasses avec la méthode static"
Actuellement ton code de test c'est ça :
String phrase = InputValue.readString("What chu say ? "); StringSentence jeDis = new StringSentence (phrase); jeDis.extractWords(); System.out.println(jeDis);
Éventuellement avec un constructeur par défaut ça donnerait ceci :
StringSentence jeDis = new StringSentence(); String phrase = InputValue.readString("What chu say ? "); jeDis.setSentence(phrase); jeDis.extractWords(); System.out.println(jeDis);
Avec une méthode static tu aurais ceci :
String phrase = InputValue.readString("What chu say ? "); String result = StringSentence.extractWords(phrase); System.out.println(result);
En effet, l'objet
jeDisne sert pas à grand chose au final, et dans ce cas la méthode statique est plus adaptée. Si je prends
InputValue.readString(...);on aurait pu faire :
InputValue input = new Input("What chu say ? "); input.readString(); String phrase = input.getValue();
Conceptuellement, c'est la même chose que ce que tu as fait avec StringSentence...
Mais c'est moche !
"comment fais tu pour faire de jolies fenêtres de code ?"
Tu peux sélectionner un langage spécifique lorsque tu mets les balises de codes :
Tu peux aussi le faire manuellement, en mettant <code java> ... </code>
WhiteT1ger
Messages postés
23
Date d'inscription
dimanche 5 octobre 2014
Statut
Membre
Dernière intervention
29 décembre 2015
1
1 nov. 2014 à 22:27
1 nov. 2014 à 22:27
Salut,
La méthode static me tente bien, mais je ne sais pas qu'est ce qui doit passer en static. Je veux dire, j'ai écrit :
Mais ca ne compile pas. J'ai voulu rendre static ma méthode extractWords, mais bien sur, elle ne fonctionne pas avec des variables non static.
Je suis donc perplexe...
Merci à toi !
La méthode static me tente bien, mais je ne sais pas qu'est ce qui doit passer en static. Je veux dire, j'ai écrit :
String phrase = InputValue.readString("What chu say ? "); String result = StringSentence.extractWords(phrase); System.out.println(result);
Mais ca ne compile pas. J'ai voulu rendre static ma méthode extractWords, mais bien sur, elle ne fonctionne pas avec des variables non static.
Je suis donc perplexe...
Merci à toi !
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
1 nov. 2014 à 22:40
1 nov. 2014 à 22:40
Il faut réécrire tout ce que tu as mis dans ta classe StringSentence pour le mettre dans une seule méthode, c'est à dire faire l'initialisation de la liste, le passage de paramètres et le retour de résultat, tout en un seul traitement (éventuellement découpée en appel de sous-méthode)
Remarque : je te conseilles d'éviter les "\n" dans les println, si tu veux revenir à la ligne, fais un autre println, on aura ainsi "\r\n" sous Windows, "\n" sous Linux, etc. mais pas un "\n" systématique.
public class StringSentence { public static List<String> extractWords(String sentence) { List<String> words = new ArrayList<String>(); StringTokenizer mySent = new StringTokenizer(sentence); while (mySent.hasMoreTokens()) { String word = mySent.nextToken(); if (!words.contains(word)) { words.add(word); } } return words; } } public class TestStringSentence { public static void main(String[] args) { String phrase = InputValue.readString("What chu say ?"); List<String> words = StringSentence.extractWords(phrase); System.out.println("Here what chu chose : " +phrase+ " \nAnd the array :\n" + words); } }
Remarque : je te conseilles d'éviter les "\n" dans les println, si tu veux revenir à la ligne, fais un autre println, on aura ainsi "\r\n" sous Windows, "\n" sous Linux, etc. mais pas un "\n" systématique.
WhiteT1ger
Messages postés
23
Date d'inscription
dimanche 5 octobre 2014
Statut
Membre
Dernière intervention
29 décembre 2015
1
Modifié par WhiteT1ger le 16/11/2014 à 19:55
Modifié par WhiteT1ger le 16/11/2014 à 19:55
Bonsoir !
Encore un problème assez simple je pense, mais il concerne les ArrayList (j'arrive pas à m'y faire -_-).
Le code:
Le super() est pour récupérer l'attribut "nom".
Je voudrais simplement pouvoir stocker mes trois variables dans l'ArrayList, et accéder à puis utiliser la moyenne via computeMean.
Plus spécifiquement, à quoi correspond le terme entre <> dans les ArrayList ?
Lorsque je lui ai demandé de corriger l'élément qui l'empêchait de compiler add(), Eclipse a aussi eu la fabuleuse idée de créer un objet qui s'initierait de cette manière :
Je n'ai aucune idée de ce qu'il a voulu faire, mais je pense qu'il contient un élément manquant dans ce que je sais pour comprendre ce qu'il se passe.
L'idée est simplement de créer ensuite deux sous-classes d'étudiants : une dont la moyenne minimale doit être de 70, l'autre de 80 (du gâteau :-) ).
Enfin, merci pour tes réponses non seulement pertinentes mais aussi très instructives ! J'ai beaucoup progressé grâce à toi, et j'espère que ça va devoir continuer (je suis loin d'être au top niveau :/ ).
Il y a toujours solution à tout.
Encore un problème assez simple je pense, mais il concerne les ArrayList (j'arrive pas à m'y faire -_-).
Le code:
import java.util.*; public class Student extends Person { private ArrayList <Student> marks; double CG1,CG2,CG3,mean; public Student(){ super(); CG1=InputValue.readReal("Course 1 mark ? "); CG2=InputValue.readReal("Course 2 mark ? "); CG3=InputValue.readReal("Course 3 mark ? "); this.marks = new ArrayList <Student>(); marks.add(CG1); } public Student(double a, double b, double c){ super(); this.CG1=a; this.CG2=b; this.CG3=c; marks = new ArrayList <Student> (); } public void computeMean(){ mean=(CG1+CG2+CG3)/3; }
Le super() est pour récupérer l'attribut "nom".
Je voudrais simplement pouvoir stocker mes trois variables dans l'ArrayList, et accéder à puis utiliser la moyenne via computeMean.
Plus spécifiquement, à quoi correspond le terme entre <> dans les ArrayList ?
Lorsque je lui ai demandé de corriger l'élément qui l'empêchait de compiler add(), Eclipse a aussi eu la fabuleuse idée de créer un objet qui s'initierait de cette manière :
Student CG1;
Je n'ai aucune idée de ce qu'il a voulu faire, mais je pense qu'il contient un élément manquant dans ce que je sais pour comprendre ce qu'il se passe.
L'idée est simplement de créer ensuite deux sous-classes d'étudiants : une dont la moyenne minimale doit être de 70, l'autre de 80 (du gâteau :-) ).
Enfin, merci pour tes réponses non seulement pertinentes mais aussi très instructives ! J'ai beaucoup progressé grâce à toi, et j'espère que ça va devoir continuer (je suis loin d'être au top niveau :/ ).
Il y a toujours solution à tout.
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
16 nov. 2014 à 20:20
16 nov. 2014 à 20:20
Le super() est pour récupérer l'attribut "nom".
à quoi correspond le terme entre <> dans les ArrayList ?
Il faut regarder dans la documentation : https://docs.oracle.com/javase/8/docs/api/java/util/List.html
Lorsque je lui ai demandé de corriger l'élément qui l'empêchait de compiler add(), Eclipse a aussi eu la fabuleuse idée de créer un objet qui s'initierait de cette manière : Student CG1;
En effet, Eclipse a vu que tu faisais
Puisque la liste est définie ArrayList<Student>, Java et donc Eclipse, attendent un add(Student) ce qui n'est possible que si CG1 est de type Student...
Donc ici ton problème c'est que ton ArrayList - qui représentent des notes - ne devraient pas être de type Student, mais de type Double.
superest implicite, même si tu ne le mets pas, l'attribut "nom" sera initialisé quand même.
à quoi correspond le terme entre <> dans les ArrayList ?
Il faut regarder dans la documentation : https://docs.oracle.com/javase/8/docs/api/java/util/List.html
Interface List<E>
Type Parameters:
E - the type of elements in this list
Lorsque je lui ai demandé de corriger l'élément qui l'empêchait de compiler add(), Eclipse a aussi eu la fabuleuse idée de créer un objet qui s'initierait de cette manière : Student CG1;
En effet, Eclipse a vu que tu faisais
marks.add(CG1), or dans une classe List<E>, la méthode add prend en paramètre un élément de type E, pas un double...
Puisque la liste est définie ArrayList<Student>, Java et donc Eclipse, attendent un add(Student) ce qui n'est possible que si CG1 est de type Student...
Donc ici ton problème c'est que ton ArrayList - qui représentent des notes - ne devraient pas être de type Student, mais de type Double.
private final List<Double> marksList = new ArrayList<Double>(); public Student(double...marks) { marksList = new ArrayList<Double>(); for (double mark : marks) marksList.add(mark); }
WhiteT1ger
Messages postés
23
Date d'inscription
dimanche 5 octobre 2014
Statut
Membre
Dernière intervention
29 décembre 2015
1
16 nov. 2014 à 20:31
16 nov. 2014 à 20:31
Je veux bien comprendre pour les éléments de type double, string etc.
Mais que veux dire ici : un élément de type Student ?
Mais que veux dire ici : un élément de type Student ?
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
16 nov. 2014 à 20:57
16 nov. 2014 à 20:57
Tu as créé une classe Student, tu peux donc t'en servir pour créer des objets de type Student, sinon ça ne sert à rien de créer des classes...
Student st = new Student(12.1, 13.7, 11.6);
WhiteT1ger
Messages postés
23
Date d'inscription
dimanche 5 octobre 2014
Statut
Membre
Dernière intervention
29 décembre 2015
1
24 déc. 2014 à 10:43
24 déc. 2014 à 10:43
Bonjour,
Toujours sur le même post.
Existe-t-il un moyen simple d'empêcher l'arrêt complet du programme lors de l'entrée de données erronées ?
Exemple si je demande un double, que j'entre un mot dans la console de commande, la console m'affiche un messsage d'erreur et s'arrête.
Merci !
Toujours sur le même post.
Existe-t-il un moyen simple d'empêcher l'arrêt complet du programme lors de l'entrée de données erronées ?
Exemple si je demande un double, que j'entre un mot dans la console de commande, la console m'affiche un messsage d'erreur et s'arrête.
Merci !
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
24 déc. 2014 à 11:06
24 déc. 2014 à 11:06
Bonjour,
Tu peux récupérer les exception/error avec la structure try/catch/finally
Catching and Handling Exceptions
Remarque : il est préférable quand c'est possible de faire des tests pour détecter le problème avant que l'exception ne soit provoquée. Par exemple tester qu'une valeur vaut null avec un if, plutôt que faire un catch sur NullPointerException.
Tu peux récupérer les exception/error avec la structure try/catch/finally
Catching and Handling Exceptions
Remarque : il est préférable quand c'est possible de faire des tests pour détecter le problème avant que l'exception ne soit provoquée. Par exemple tester qu'une valeur vaut null avec un if, plutôt que faire un catch sur NullPointerException.
WhiteT1ger
Messages postés
23
Date d'inscription
dimanche 5 octobre 2014
Statut
Membre
Dernière intervention
29 décembre 2015
1
24 déc. 2014 à 20:19
24 déc. 2014 à 20:19
C'est un peu chaud tout ça.... Mais j'y jetterais sûrement un coup d'oeil plus poussé un peu plus tard. En tout cas je saurais par où passer au cas où.
WhiteT1ger
Messages postés
23
Date d'inscription
dimanche 5 octobre 2014
Statut
Membre
Dernière intervention
29 décembre 2015
1
Modifié par WhiteT1ger le 24/12/2014 à 20:20
Modifié par WhiteT1ger le 24/12/2014 à 20:20
Merci KX !
Je me demandais comment exprimer une boucle conditionnée par un String. Exemple, je voudrais que le petit code suivant se répète tant qu'il n'a pas trouvé de "oui" ou de "non", et qu'il s'arrête lorsque la réponse a été soit oui soit non. Par exemple cela ne marche pas avec la condition :
Mon petit code :
Il y a toujours solution à tout.
Je me demandais comment exprimer une boucle conditionnée par un String. Exemple, je voudrais que le petit code suivant se répète tant qu'il n'a pas trouvé de "oui" ou de "non", et qu'il s'arrête lorsque la réponse a été soit oui soit non. Par exemple cela ne marche pas avec la condition :
while(a != "oui" | a != "non")
Mon petit code :
boolean swim; String a; a = InputValue.readString("Is there a swimming pool ? (oui/non) "); switch(a.toLowerCase()){ case "oui" : swim=true; System.out.println("Swim pool registered"); break; case "non" : swim=false; System.out.println("Ok, no swim pool."); break; default : System.out.println("Make good choice. "); }
Il y a toujours solution à tout.
WhiteT1ger
Messages postés
23
Date d'inscription
dimanche 5 octobre 2014
Statut
Membre
Dernière intervention
29 décembre 2015
1
24 déc. 2014 à 21:46
24 déc. 2014 à 21:46
Et joyeux Noël !
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
24 déc. 2014 à 21:50
24 déc. 2014 à 21:50
while(a != "oui" | a != "non")
En Java les opérateurs == ou != permettent de comparer deux objets, pas leurs valeurs.
Tu peux avoir deux String de même valeurs : l'un écrit en dur dans le code, et l'autre obtenu par un readString, mais pourtant ce sont bien deux objets différents, ils seront donc toujours !=
Pour comparer des objets, et en particulier des String, il faut utiliser la méthode equals.
De plus : l'opérateur
|existe en Java, mais il est plutôt utilisé pour le calcul de bits, pas pour les booléens. Du coup avec un
|tu vas évaluer les deux conditions, à gauche et à droite, puis les calculer. Alors qu'en utilisant l'opérateur des booléens
||si la condition à gauche est vraie, il n'aura pas besoin de calculer la condition de droite pour connaître le résultat total. Ça peut paraître pas grand chose dans ton cas, mais c'est vraiment important pour la suite (idem pour
&et
&&)
Enfin, attention : ta logique booléenne est mauvaise ce n'est pas tant que a différent de "oui" OU a différent de "non", mais tant que a différent de "oui" ET b différent de "non". Parce que sinon tu en auras toujours au moins des deux qui sera vrai (si a vaut "oui", b sera différent de "non", et inversement)
while (!a.equals("oui") && !a.equals("non"))
WhiteT1ger
Messages postés
23
Date d'inscription
dimanche 5 octobre 2014
Statut
Membre
Dernière intervention
29 décembre 2015
1
24 déc. 2014 à 21:58
24 déc. 2014 à 21:58
Tip top merci beaucoup !