Précédent   Forum des professionnels en informatique > Java > Général Java > Langage
Langage Forum d'entraide sur le langage Java et autres langages pour la JVM : syntaxe, POO, conventions, API standard. Avant de poster -> FAQ Java
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 17/01/2012, 10h06   #1
Invité régulier
 
Étudiant
Inscription : novembre 2008
Messages : 10
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2008
Messages : 10
Points : 7
Points : 7
Par défaut Problème avec java.util.Scanner.

Le programme suivant me renvoie une exception mais je n'en comprends pas la cause.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.io.File;
import java.util.Scanner;
 
public class parseeTest 
{
	public static void main(String[] args) 
	{
		File file = new File("./testScanner.txt");
		try 
		{
			Scanner sc = new Scanner(file);
 
			double test = Double.parseDouble(sc.next());
			System.out.println(test);
			double test2 = sc.nextDouble();
			System.out.println(test2);
		} 
		catch (Exception e) {
			e.printStackTrace();
		}
	}
}
le fichier a parser :

Code :
.64000E+02   .39000E+02   .77000E+02   .21500E+02   .43250E+00
l'exception :

Code :
1
2
3
4
5
java.util.InputMismatchException
	at java.util.Scanner.throwFor(Unknown Source)
	at java.util.Scanner.next(Unknown Source)
	at java.util.Scanner.nextDouble(Unknown Source)
	at com.thales.test.parseeTest.main(parseeTest.java:21)
Ce code semblait bien se comporter sous java 1.7 mais lève une exception sous java 1.7_02.

Merci d'avance.
Andarus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 10h45   #2
Invité régulier
 
Étudiant
Inscription : novembre 2008
Messages : 10
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2008
Messages : 10
Points : 7
Points : 7
Après quelque test il semble que ce code se comporte correctement sur windows 32 bit mais qu'il lève l'exception sur windows 64 bit lorsqu'il est excecuté sur une jvm oracle 32 ou 64 bit.

Je ne vois vraiment pas où se trouve mon erreur .
Andarus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 11h54   #3
Expert Confirmé Sénior
 
Inscription : septembre 2004
Messages : 5 092
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 092
Points : 7 019
Points : 7 019
Contrairement à Double.parseDouble(), un Scanner cherche à parser selon une Locale précise, et si ça ne correspond pas il lance cette exception.

Si on ne lui indique pas de Locale précise il va prendre la Locale par défaut, ce qui dans ton cas :
- est l'anglais sur le windows 32 bits.
- est probablement le français sur le windows 64 bits.

En français, le séparateur décimal est une virgule, pas un point. D'où l'erreur.

Correction : ajouter cette ligne

Code :
sc.useLocale(Locale.US);
thelvin est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web