Besoin d'aide avec un prog simple en Java
Éliane
-
souhila29 -
souhila29 -
Bonjour a tous, je commence à peine a programmer avec Java et j'aurais quelques question concernant un petit programme que je doit faire pour l'école. Le programme utilise une classe appelée "Clavier" pour la saisie des données au clavier.
Mon probleme majeur est que lorsque j'entre un code different de 's', 'a', 'f', 'd', ou 'q' voici ce que sa me donne:
---------------------------------------------------
Entrez le code de l'infraction :
z
Les codes d'infraction permis sont : s, a, f, d et q pour quitter
Entrez le code de l'infraction :
Les codes d'infraction permis sont : s, a, f, d et q pour quitter
Entrez le code de l'infraction :
----------------------------------------------------
la boucle est effectuée 2 fois et je ne comprend pas pourquoi.
Je crois que cela a un lien avec les méthodes "lireChar()" et "lireFinLigne()" de la classe "Clavier" fournis par le prof que je dois obligatoirement utilisée pour la saisie de données. Dans mon prog je n'utilise que la méthode "lireChar" mais je ne comprend ce quelle fait ni ce que la méthode "lireFinLigne" fait...donc si vous pourriez m'aider en regardant mon petit programme et la class "Clavier" je vous en serais extremement reconnaissante.
Voici donc mon prog (class) :
-------------------------------------------------------------
public class Infraction {
// Autres méthodes s'il y a lieu
public static void main (String[] params) {
char codeInfraction;
char sexe;
int age;
int vitesseMax;
int vitesseConstatee;
int nbrPoint;
int totInfraction;
int totPoint;
int totFemme;
int totHomme;
int totAgeHomme;
int totAgeFemme;
double moyenneFemme;
double moyenneHomme;
String libelle ;
libelle = "";
moyenneFemme = 0;
moyenneHomme = 0;
nbrPoint = 0;
totInfraction = 0;
totPoint = 0;
totFemme = 0;
totHomme = 0;
totAgeHomme = 0;
totAgeFemme = 0;
System.out.println ( "\n" + "Entrez le code de l'infraction : " );
codeInfraction = Clavier.lireChar();
while ( codeInfraction != 'q' ) {
if ( codeInfraction != 's' && codeInfraction != 'a' && codeInfraction != 'f' && codeInfraction != 'd' ){
System.out.println ( "\n" + "Les codes d'infraction permis sont : s, a, f, d et q pour quitter" );
}else if ( codeInfraction == 's') { // if "s"
libelle = "Excès de vitesse";
System.out.println ( "\n" + "Entrez la vitesse maximale permise : " );
vitesseMax = Clavier.lireInt();
while ( vitesseMax < 30 || vitesseMax > 100) {
System.out.println ( "\n" + "La vitesse maximale permise doit être comprise entre 30 et 100." );
System.out.println ( "\n" + "Entrez la vitesse maximale permise : " );
vitesseMax = Clavier.lireInt();
}
System.out.println ( "\n" + "Entrez la vitesse constatée : " );
vitesseConstatee = Clavier.lireInt();
while ( vitesseConstatee - vitesseMax <= 0 ) { // validation vitesse
System.out.println ( "\n" + "La vitesse constatée doit être plus grande que la vitesse maximale permise" );
System.out.println ( "\n" + "Entrez la vitesse constatée : " );
vitesseConstatee = Clavier.lireInt();
} // while valiadtion vitesse
if ( vitesseConstatee - vitesseMax <= 10 ) {
nbrPoint = 0;
} else if ( vitesseConstatee - vitesseMax <= 20 ) {
nbrPoint = 1;
} else if ( vitesseConstatee - vitesseMax <= 30 ) {
nbrPoint = 2;
} else if ( vitesseConstatee - vitesseMax <= 45 ) {
nbrPoint = 3;
} else if ( vitesseConstatee - vitesseMax <= 60 ) {
nbrPoint = 5;
} else {
nbrPoint = 8;
} // if calcul de la vitesse
} else if ( codeInfraction == 'f') {
libelle = "Omission de se conformer à un feu rouge ou à un panneau d'arrêt";
nbrPoint = 3;
} else if ( codeInfraction == 'a') {
libelle = "Vitesse ou action imprudente";
nbrPoint = 4;
} else if ( codeInfraction == 'd') {
libelle = "Omission d’arrêter avant d’effectuer un virage à droite sur feu rouge";
nbrPoint = 3;
} //
if ( codeInfraction == 's' || codeInfraction == 'f' || codeInfraction == 'a' || codeInfraction == 'd' ) {
System.out.println ( "\n" + "Entrez le sexe de la personne ( h(homme) ou f(femme) ) : " );
sexe = Clavier.lireChar();
while ( sexe != 'h' && sexe != 'f' ) {
System.out.println ( "\n" + "Le sexe doit être soit h(homme) ou f(femme)" );
sexe = Clavier.lireChar();
}
System.out.println ( "\n" + "Entrez l'âge de la personne : " );
age = Clavier.lireInt();
while ( age < 16 || age > 100) {
System.out.println ( "\n" + "L'age doit être compris entre 16 et 100 ans inclusivement" );
age = Clavier.lireInt();
}
if ( sexe == 'h') {
totHomme = totHomme + 1;
totAgeHomme = totAgeHomme + age;
} else {
totFemme = totFemme + 1;
totAgeFemme = totAgeFemme + age;
}
totInfraction = totInfraction + 1 ;
totPoint = totPoint + nbrPoint;
System.out.println ( "\n" + libelle + " : " + nbrPoint + " points d'infraction." );
}
System.out.println ( "\n" + "Entrez le code de l'infraction : " );
codeInfraction = Clavier.lireChar();
}
if ( totHomme > 0 && totFemme > 0) {
moyenneHomme = totAgeHomme / totHomme;
moyenneFemme = totAgeFemme / totFemme;
System.out.println ( "Nombre total d'infractions : " + totInfraction );
System.out.println ( "Nombre total de points d'inaptitude : " + totPoint );
System.out.println ( "Nombre total de femmes en infraction : " + totFemme + "\n" + "Age moyen : " + moyenneFemme );
System.out.println ( "Nombre total d'hommes en infraction : " + totHomme + "\n" + "Age moyen : " + moyenneHomme );
} else if ( totHomme > 0 && totFemme == 0 ) {
moyenneHomme = totAgeHomme / totHomme;
System.out.println ( "Nombre total d'infractions : " + totInfraction );
System.out.println ( "Nombre total de points d'inaptitude : " + totPoint );
System.out.println ( "Nombre total d'hommes en infraction : " + totHomme + "\n" + "Age moyen : " + moyenneHomme );
} else if ( totHomme == 0 && totFemme > 0 ) {
moyenneFemme = totAgeFemme / totFemme;
System.out.println ( "Nombre total d'infractions : " + totInfraction );
System.out.println ( "Nombre total de points d'inaptitude : " + totPoint );
System.out.println ( "Nombre total de femmes en infraction : " + totFemme + "\n" + "Age moyen : " + moyenneFemme );
} else {
System.out.println ( "Nombre total d'infractions : " + totInfraction );
System.out.println ( "Nombre total de points d'inaptitude : " + totPoint );
}
} // main
}// Infraction
-----------------------------------------------------------------
Et maintenant voici la class que je doit utiliser pour la saisie au clavier.
-------------------------------------------------------------
public class Clavier {
private static String lireMot() {
/* antecedent : -
* consequent : Retourne le mot lu, a partir du curseur.
* Les separateurs (voir plus haut) de debut sont
* ignores. La fin du mot est determinee par un sepa-
* rateur. Le separateur qui suit le mot est lu.
* Le curseur est rendu sur le premier caractere suiv-
* ant le separateur ayant determine la fin du mot.
*/
String resultat = "";
char car; // caractere lu
// Sauter les separateurs
do {
car = lireChar();
} while ( Character.isWhitespace( car ) );
// car ne contient pas un separateur.
// Lire et stocker dans resultat jusqu'a un separateur
do {
resultat = resultat + car;
car = lireChar();
} while ( ! Character.isWhitespace( car ) );
// car contient un separateur.
// S'il s'agit de CR, il faut qu'il soit suivi de LF
if ( car == '\r' ) { // CR
car = lireChar();
if ( car != '\n' ) { // LF
System.out.println(
"Erreur fatale dans la methode lireMot de la classe Clavier.");
System.exit(1); // 1 : pour signifier un arret anormal
} // if non LF
} // if CR
return resultat;
} // lireMot
public static void viderTampon() {
/* antecedent : -
* consequent : Vide le tampon d'entree associe a la console.
*/
try {
System.in.skip( System.in.available() );
} catch( IOException e ) {
System.out.println ( "Le tampon d'entree ne peut etre vide." );
}
} // viderTampon
public static void lireFinLigne() {
/* antecedent :
* consequent : Lit les caracteres, a partir du curseur.
* La fin de la ligne est determinee par :
* LF (line feed) ou par CR (carriage return)
* suivi de LF.
* LF et CR seront lus.
*/
char prochain_caractere;
boolean fini = false;
while ( ! fini ) {
prochain_caractere = lireChar(); // Lire un caractere
if ( prochain_caractere == '\r' ) { // CR
prochain_caractere = lireChar();
if ( prochain_caractere == '\n' ) { // LF
fini = true;
} else { // CR doit etre suivi de LF, sous Windows
System.out.println (
"Erreur fatale dans la methode lireLigne de la classe Clavier.");
System.exit(1); // 1 : pour signifier un arret anormal
} // if non LF
} else if ( prochain_caractere == '\n' ) { // UNIX, Linux et Mac OS X
fini = true;
}
} // while
} // lireFinLigne
public static String lireString() {
/* antecedent :
* consequent : Retourne la chaine lue, a partir du curseur.
* La fin de la chaine est determinee par :
* LF (line feed) ou par CR (carriage return)
* suivi de LF.
* Ni LF ni CR ne seront presents dans la chaine mais
* auront ete lus.
*/
char prochain_caractere;
String resultat = "";
boolean fini = false;
while ( ! fini ) {
prochain_caractere = lireChar(); // Lire un caractere
if ( prochain_caractere == '\r' ) { // CR
prochain_caractere = lireChar();
if ( prochain_caractere == '\n' ) { // LF
fini = true;
} else { // CR doit etre suivi de LF, sous Windows
System.out.println (
"Erreur fatale dans la methode lireLigne de la classe Clavier.");
System.exit(1); // 1 : pour signifier un arret anormal
} // if non LF
} else if ( prochain_caractere == '\n' ) { // UNIX et Mac OS X
fini = true;
} else { // concatener le caractere a la fin de la chaine
resultat = resultat + prochain_caractere;
}
} // while
return resultat;
} // lireString
public static byte lireByte() {
/* antecedent : -
* consequent : retourne le nombre entier octet lu, a partir du
* curseur. La fin du nombre est determinee par un
* separateur (voir ci-haut). Le separateur est lu.
* Le nombre peut commencer par - (negatif) mais ne
* peut commencer par +.
*/
String chaine_lue = null;
chaine_lue = lireMot();
return Byte.parseByte( chaine_lue );
} // lireByte
public static short lireShort() {
/* antecedent : -
* consequent : retourne le nombre entier court lu, a partir du
* curseur. La fin du nombre est determinee par un
* separateur (voir ci-haut). Le separateur est lu.
* Le nombre peut commencer par - (negatif) mais ne
* peut commencer par +.
*/
String chaine_lue = null;
chaine_lue = lireMot();
return Short.parseShort( chaine_lue );
} // lireShort
public static int lireInt() {
/* antecedent : -
* consequent : retourne le nombre entier lu, a partir du
* curseur. La fin du nombre est determinee par un
* separateur (voir ci-haut). Le separateur est lu.
* Le nombre peut commencer par - (negatif) mais ne
* peut commencer par +.
*/
String chaine_lue = null;
chaine_lue = lireMot();
return Integer.parseInt( chaine_lue );
} // lireInt
public static long lireLong() {
/* antecedent : -
* consequent : retourne le nombre entier long lu, a partir du
* curseur. La fin du nombre est determinee par un
* separateur (voir ci-haut). Le separateur est lu.
* Le nombre peut commencer par - (negatif) mais ne
* peut commencer par +.
*/
String chaine_lue = null;
chaine_lue = lireMot();
return Long.parseLong( chaine_lue );
} // lireLong
public static float lireFloat() {
/* antecedent : -
* consequent : retourne le nombre reel lu, a partir du
* curseur. La fin du nombre est determinee par un
* separateur (voir ci-haut). Le separateur est lu.
* Le nombre peut commencer par - (negatif) ou + (positif).
* Le nombre peut ne pas contenir le point decimal.
*/
String chaine_lue = null;
chaine_lue = lireMot();
return Float.parseFloat( chaine_lue );
} // lireFloat
public static double lireDouble() {
/* antecedent :
* consequent : retourne le nombre reel double lu, a partir du
* curseur. La fin du nombre est determinee par un
* separateur (voir ci-haut). Le separateur est lu.
* Le nombre peut commencer par - (negatif) ou + (positif).
* Le nombre peut ne pas contenir le point decimal.
*/
String chaine_lue = null;
chaine_lue = lireMot();
return Double.parseDouble( chaine_lue );
} // lireDouble
public static char lireChar() {
/* antecedent : -
* consequent : Retourne le caractere lu, a partir du curseur.
* Le curseur est rendu sur le caractere qui suit le
* caractere lu.
*/
int code_ascii = -1; // valeur bidon
try {
code_ascii = System.in.read();
} catch( IOException e ) {
// on ne fait rien
}
return ( char ) code_ascii;
} // lireChar
} // Clavier
-----------------------------------------------------------------
Je sais tres bien que mon programme est mal fait mais le plus important serais qu'il fonctionne et non son efficacité coté temps.
Pour ce qui est des validations je doit seulement fair les validations logiques en assumant que l'utilisateur entrera le bon type lorsque demandé.
Donc si quelqu'un pouvait m'aider ;) je crois que je doit utiliser la méthode "lireFinLigne()" mais je ne sais pas ou et comment.
Merci à tous.
Mon probleme majeur est que lorsque j'entre un code different de 's', 'a', 'f', 'd', ou 'q' voici ce que sa me donne:
---------------------------------------------------
Entrez le code de l'infraction :
z
Les codes d'infraction permis sont : s, a, f, d et q pour quitter
Entrez le code de l'infraction :
Les codes d'infraction permis sont : s, a, f, d et q pour quitter
Entrez le code de l'infraction :
----------------------------------------------------
la boucle est effectuée 2 fois et je ne comprend pas pourquoi.
Je crois que cela a un lien avec les méthodes "lireChar()" et "lireFinLigne()" de la classe "Clavier" fournis par le prof que je dois obligatoirement utilisée pour la saisie de données. Dans mon prog je n'utilise que la méthode "lireChar" mais je ne comprend ce quelle fait ni ce que la méthode "lireFinLigne" fait...donc si vous pourriez m'aider en regardant mon petit programme et la class "Clavier" je vous en serais extremement reconnaissante.
Voici donc mon prog (class) :
-------------------------------------------------------------
public class Infraction {
// Autres méthodes s'il y a lieu
public static void main (String[] params) {
char codeInfraction;
char sexe;
int age;
int vitesseMax;
int vitesseConstatee;
int nbrPoint;
int totInfraction;
int totPoint;
int totFemme;
int totHomme;
int totAgeHomme;
int totAgeFemme;
double moyenneFemme;
double moyenneHomme;
String libelle ;
libelle = "";
moyenneFemme = 0;
moyenneHomme = 0;
nbrPoint = 0;
totInfraction = 0;
totPoint = 0;
totFemme = 0;
totHomme = 0;
totAgeHomme = 0;
totAgeFemme = 0;
System.out.println ( "\n" + "Entrez le code de l'infraction : " );
codeInfraction = Clavier.lireChar();
while ( codeInfraction != 'q' ) {
if ( codeInfraction != 's' && codeInfraction != 'a' && codeInfraction != 'f' && codeInfraction != 'd' ){
System.out.println ( "\n" + "Les codes d'infraction permis sont : s, a, f, d et q pour quitter" );
}else if ( codeInfraction == 's') { // if "s"
libelle = "Excès de vitesse";
System.out.println ( "\n" + "Entrez la vitesse maximale permise : " );
vitesseMax = Clavier.lireInt();
while ( vitesseMax < 30 || vitesseMax > 100) {
System.out.println ( "\n" + "La vitesse maximale permise doit être comprise entre 30 et 100." );
System.out.println ( "\n" + "Entrez la vitesse maximale permise : " );
vitesseMax = Clavier.lireInt();
}
System.out.println ( "\n" + "Entrez la vitesse constatée : " );
vitesseConstatee = Clavier.lireInt();
while ( vitesseConstatee - vitesseMax <= 0 ) { // validation vitesse
System.out.println ( "\n" + "La vitesse constatée doit être plus grande que la vitesse maximale permise" );
System.out.println ( "\n" + "Entrez la vitesse constatée : " );
vitesseConstatee = Clavier.lireInt();
} // while valiadtion vitesse
if ( vitesseConstatee - vitesseMax <= 10 ) {
nbrPoint = 0;
} else if ( vitesseConstatee - vitesseMax <= 20 ) {
nbrPoint = 1;
} else if ( vitesseConstatee - vitesseMax <= 30 ) {
nbrPoint = 2;
} else if ( vitesseConstatee - vitesseMax <= 45 ) {
nbrPoint = 3;
} else if ( vitesseConstatee - vitesseMax <= 60 ) {
nbrPoint = 5;
} else {
nbrPoint = 8;
} // if calcul de la vitesse
} else if ( codeInfraction == 'f') {
libelle = "Omission de se conformer à un feu rouge ou à un panneau d'arrêt";
nbrPoint = 3;
} else if ( codeInfraction == 'a') {
libelle = "Vitesse ou action imprudente";
nbrPoint = 4;
} else if ( codeInfraction == 'd') {
libelle = "Omission d’arrêter avant d’effectuer un virage à droite sur feu rouge";
nbrPoint = 3;
} //
if ( codeInfraction == 's' || codeInfraction == 'f' || codeInfraction == 'a' || codeInfraction == 'd' ) {
System.out.println ( "\n" + "Entrez le sexe de la personne ( h(homme) ou f(femme) ) : " );
sexe = Clavier.lireChar();
while ( sexe != 'h' && sexe != 'f' ) {
System.out.println ( "\n" + "Le sexe doit être soit h(homme) ou f(femme)" );
sexe = Clavier.lireChar();
}
System.out.println ( "\n" + "Entrez l'âge de la personne : " );
age = Clavier.lireInt();
while ( age < 16 || age > 100) {
System.out.println ( "\n" + "L'age doit être compris entre 16 et 100 ans inclusivement" );
age = Clavier.lireInt();
}
if ( sexe == 'h') {
totHomme = totHomme + 1;
totAgeHomme = totAgeHomme + age;
} else {
totFemme = totFemme + 1;
totAgeFemme = totAgeFemme + age;
}
totInfraction = totInfraction + 1 ;
totPoint = totPoint + nbrPoint;
System.out.println ( "\n" + libelle + " : " + nbrPoint + " points d'infraction." );
}
System.out.println ( "\n" + "Entrez le code de l'infraction : " );
codeInfraction = Clavier.lireChar();
}
if ( totHomme > 0 && totFemme > 0) {
moyenneHomme = totAgeHomme / totHomme;
moyenneFemme = totAgeFemme / totFemme;
System.out.println ( "Nombre total d'infractions : " + totInfraction );
System.out.println ( "Nombre total de points d'inaptitude : " + totPoint );
System.out.println ( "Nombre total de femmes en infraction : " + totFemme + "\n" + "Age moyen : " + moyenneFemme );
System.out.println ( "Nombre total d'hommes en infraction : " + totHomme + "\n" + "Age moyen : " + moyenneHomme );
} else if ( totHomme > 0 && totFemme == 0 ) {
moyenneHomme = totAgeHomme / totHomme;
System.out.println ( "Nombre total d'infractions : " + totInfraction );
System.out.println ( "Nombre total de points d'inaptitude : " + totPoint );
System.out.println ( "Nombre total d'hommes en infraction : " + totHomme + "\n" + "Age moyen : " + moyenneHomme );
} else if ( totHomme == 0 && totFemme > 0 ) {
moyenneFemme = totAgeFemme / totFemme;
System.out.println ( "Nombre total d'infractions : " + totInfraction );
System.out.println ( "Nombre total de points d'inaptitude : " + totPoint );
System.out.println ( "Nombre total de femmes en infraction : " + totFemme + "\n" + "Age moyen : " + moyenneFemme );
} else {
System.out.println ( "Nombre total d'infractions : " + totInfraction );
System.out.println ( "Nombre total de points d'inaptitude : " + totPoint );
}
} // main
}// Infraction
-----------------------------------------------------------------
Et maintenant voici la class que je doit utiliser pour la saisie au clavier.
-------------------------------------------------------------
public class Clavier {
private static String lireMot() {
/* antecedent : -
* consequent : Retourne le mot lu, a partir du curseur.
* Les separateurs (voir plus haut) de debut sont
* ignores. La fin du mot est determinee par un sepa-
* rateur. Le separateur qui suit le mot est lu.
* Le curseur est rendu sur le premier caractere suiv-
* ant le separateur ayant determine la fin du mot.
*/
String resultat = "";
char car; // caractere lu
// Sauter les separateurs
do {
car = lireChar();
} while ( Character.isWhitespace( car ) );
// car ne contient pas un separateur.
// Lire et stocker dans resultat jusqu'a un separateur
do {
resultat = resultat + car;
car = lireChar();
} while ( ! Character.isWhitespace( car ) );
// car contient un separateur.
// S'il s'agit de CR, il faut qu'il soit suivi de LF
if ( car == '\r' ) { // CR
car = lireChar();
if ( car != '\n' ) { // LF
System.out.println(
"Erreur fatale dans la methode lireMot de la classe Clavier.");
System.exit(1); // 1 : pour signifier un arret anormal
} // if non LF
} // if CR
return resultat;
} // lireMot
public static void viderTampon() {
/* antecedent : -
* consequent : Vide le tampon d'entree associe a la console.
*/
try {
System.in.skip( System.in.available() );
} catch( IOException e ) {
System.out.println ( "Le tampon d'entree ne peut etre vide." );
}
} // viderTampon
public static void lireFinLigne() {
/* antecedent :
* consequent : Lit les caracteres, a partir du curseur.
* La fin de la ligne est determinee par :
* LF (line feed) ou par CR (carriage return)
* suivi de LF.
* LF et CR seront lus.
*/
char prochain_caractere;
boolean fini = false;
while ( ! fini ) {
prochain_caractere = lireChar(); // Lire un caractere
if ( prochain_caractere == '\r' ) { // CR
prochain_caractere = lireChar();
if ( prochain_caractere == '\n' ) { // LF
fini = true;
} else { // CR doit etre suivi de LF, sous Windows
System.out.println (
"Erreur fatale dans la methode lireLigne de la classe Clavier.");
System.exit(1); // 1 : pour signifier un arret anormal
} // if non LF
} else if ( prochain_caractere == '\n' ) { // UNIX, Linux et Mac OS X
fini = true;
}
} // while
} // lireFinLigne
public static String lireString() {
/* antecedent :
* consequent : Retourne la chaine lue, a partir du curseur.
* La fin de la chaine est determinee par :
* LF (line feed) ou par CR (carriage return)
* suivi de LF.
* Ni LF ni CR ne seront presents dans la chaine mais
* auront ete lus.
*/
char prochain_caractere;
String resultat = "";
boolean fini = false;
while ( ! fini ) {
prochain_caractere = lireChar(); // Lire un caractere
if ( prochain_caractere == '\r' ) { // CR
prochain_caractere = lireChar();
if ( prochain_caractere == '\n' ) { // LF
fini = true;
} else { // CR doit etre suivi de LF, sous Windows
System.out.println (
"Erreur fatale dans la methode lireLigne de la classe Clavier.");
System.exit(1); // 1 : pour signifier un arret anormal
} // if non LF
} else if ( prochain_caractere == '\n' ) { // UNIX et Mac OS X
fini = true;
} else { // concatener le caractere a la fin de la chaine
resultat = resultat + prochain_caractere;
}
} // while
return resultat;
} // lireString
public static byte lireByte() {
/* antecedent : -
* consequent : retourne le nombre entier octet lu, a partir du
* curseur. La fin du nombre est determinee par un
* separateur (voir ci-haut). Le separateur est lu.
* Le nombre peut commencer par - (negatif) mais ne
* peut commencer par +.
*/
String chaine_lue = null;
chaine_lue = lireMot();
return Byte.parseByte( chaine_lue );
} // lireByte
public static short lireShort() {
/* antecedent : -
* consequent : retourne le nombre entier court lu, a partir du
* curseur. La fin du nombre est determinee par un
* separateur (voir ci-haut). Le separateur est lu.
* Le nombre peut commencer par - (negatif) mais ne
* peut commencer par +.
*/
String chaine_lue = null;
chaine_lue = lireMot();
return Short.parseShort( chaine_lue );
} // lireShort
public static int lireInt() {
/* antecedent : -
* consequent : retourne le nombre entier lu, a partir du
* curseur. La fin du nombre est determinee par un
* separateur (voir ci-haut). Le separateur est lu.
* Le nombre peut commencer par - (negatif) mais ne
* peut commencer par +.
*/
String chaine_lue = null;
chaine_lue = lireMot();
return Integer.parseInt( chaine_lue );
} // lireInt
public static long lireLong() {
/* antecedent : -
* consequent : retourne le nombre entier long lu, a partir du
* curseur. La fin du nombre est determinee par un
* separateur (voir ci-haut). Le separateur est lu.
* Le nombre peut commencer par - (negatif) mais ne
* peut commencer par +.
*/
String chaine_lue = null;
chaine_lue = lireMot();
return Long.parseLong( chaine_lue );
} // lireLong
public static float lireFloat() {
/* antecedent : -
* consequent : retourne le nombre reel lu, a partir du
* curseur. La fin du nombre est determinee par un
* separateur (voir ci-haut). Le separateur est lu.
* Le nombre peut commencer par - (negatif) ou + (positif).
* Le nombre peut ne pas contenir le point decimal.
*/
String chaine_lue = null;
chaine_lue = lireMot();
return Float.parseFloat( chaine_lue );
} // lireFloat
public static double lireDouble() {
/* antecedent :
* consequent : retourne le nombre reel double lu, a partir du
* curseur. La fin du nombre est determinee par un
* separateur (voir ci-haut). Le separateur est lu.
* Le nombre peut commencer par - (negatif) ou + (positif).
* Le nombre peut ne pas contenir le point decimal.
*/
String chaine_lue = null;
chaine_lue = lireMot();
return Double.parseDouble( chaine_lue );
} // lireDouble
public static char lireChar() {
/* antecedent : -
* consequent : Retourne le caractere lu, a partir du curseur.
* Le curseur est rendu sur le caractere qui suit le
* caractere lu.
*/
int code_ascii = -1; // valeur bidon
try {
code_ascii = System.in.read();
} catch( IOException e ) {
// on ne fait rien
}
return ( char ) code_ascii;
} // lireChar
} // Clavier
-----------------------------------------------------------------
Je sais tres bien que mon programme est mal fait mais le plus important serais qu'il fonctionne et non son efficacité coté temps.
Pour ce qui est des validations je doit seulement fair les validations logiques en assumant que l'utilisateur entrera le bon type lorsque demandé.
Donc si quelqu'un pouvait m'aider ;) je crois que je doit utiliser la méthode "lireFinLigne()" mais je ne sais pas ou et comment.
Merci à tous.
A voir également:
- Besoin d'aide avec un prog simple en Java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Iphone 14 simple - Guide
- Java apk - Télécharger - Langages
6 réponses
Je pense que l' "erreur" vient juste de la methode lirechar en effet
quand tu tape z + enter le z doit etre placé dans le char et enterreste en attente jusaqu'au passage du prochain read.
La solution serai sans doute d'utiliser lireString qui te renvoie une chaine de caracteres que tu compare ensuite avec ce que tu veux :
exemple:
System.out.println ( "\n" + "Entrez le code de l'infraction : " );
String codeInfraction = Clavier.lireString();
while ( codeInfraction .equalsIgnoreCase ("q") ) {
if (! codeInfraction .equalsIgnoreCase ("s") &&
!codeInfraction .equalsIgnoreCase ("a") &&
!codeInfraction .equalsIgnoreCase ("f") &&
!codeInfraction .equalsIgnoreCase ("d")){
System.out.println ( "\n" + "Les codes d'infraction permis sont : s, a, f, d et q pour quitter" );
}else if ( ............................................
pour le equalsIgnoreCase en fait cela fait une comparaison de chaine en ignorant la case (ce qui est pratique dans ton cas)
verifie par contre que cela s'ecrit bien comme ca...je n'ai pas de compilo java sous la main la...
n'hesite pas si tu as d'autres questions..bon courage et bonne journée
COIN!
quand tu tape z + enter le z doit etre placé dans le char et enterreste en attente jusaqu'au passage du prochain read.
La solution serai sans doute d'utiliser lireString qui te renvoie une chaine de caracteres que tu compare ensuite avec ce que tu veux :
exemple:
System.out.println ( "\n" + "Entrez le code de l'infraction : " );
String codeInfraction = Clavier.lireString();
while ( codeInfraction .equalsIgnoreCase ("q") ) {
if (! codeInfraction .equalsIgnoreCase ("s") &&
!codeInfraction .equalsIgnoreCase ("a") &&
!codeInfraction .equalsIgnoreCase ("f") &&
!codeInfraction .equalsIgnoreCase ("d")){
System.out.println ( "\n" + "Les codes d'infraction permis sont : s, a, f, d et q pour quitter" );
}else if ( ............................................
pour le equalsIgnoreCase en fait cela fait une comparaison de chaine en ignorant la case (ce qui est pratique dans ton cas)
verifie par contre que cela s'ecrit bien comme ca...je n'ai pas de compilo java sous la main la...
n'hesite pas si tu as d'autres questions..bon courage et bonne journée
COIN!
ok merci beaucoup...jai fini par men rendre compte :P jai ajouté lireFinLigne(); c'est que le "enter" etais consideré comme un char
Merci!
Merci!
salut j'ai besoin d'un programme qui résoud un systeme linéaire sous java en précisant la méthode de simplexe
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question