Java >> Tutoriel Java >  >> Tag >> class

Comportement inattendu de l'entrée et de la sortie Java standard via la classe Scanner

La méthode la plus courante pour prendre une entrée dans un programme Java consiste à utiliser la classe Scanner qui est importée du package d'utilitaires Java en utilisant l'instruction donnée ci-dessous.

import java.util.Scanner; /*imported at beginning of the java program*/

L'entrée est donnée avec le flux d'entrée d'aide System.in

Syntaxe :

Scanner KB=new Scanner(System.in);
/*Where KB is an object name, you can change it as per your choice*/

Il existe différentes méthodes de saisie fournies dans la classe Scanner pour différents types de données primitifs tels que :

Type de données Méthode
Entier nextInt()
Double suivantDouble()
Longue suivantLong()
Flottant nextFloat()
Octet NextByte()
Chaîne nextLine() /* Autorise les espaces entre une chaîne */
next() /* N'autorise pas les espaces entre une chaîne */

Considérez le programme :

import java.util.Scanner;

class UnexpectedBehaviour
{
	public static void main(String args[])
	{
		Scanner KB=new Scanner(System.in);
		
		int i;
		float f;
		String s;
		
		i=KB.nextInt();
		f=KB.nextFloat();
		s=KB.nextLine();
		
		System.out.println("Output String is : "+s);
		System.out.println("Output Integer is : "+i);
		System.out.println("Output Float is : "+f);
	}
}

Sortie

1
8.8
Output String is :
Output Integer is : 1 
Output Float is : 8.8 
Publicité

Mais ce comportement inattendu se produit lorsque nous utilisons la méthode nextLine() juste après la méthode suivante de types de données autres que String tels que nextInt() , nextDouble() , nextFloat() etc. Des méthodes spécifiques lisent des jetons spécifiques et ainsi de suite dans ce qui précède programme juste après KB.nextFloat(), le nouveau caractère de ligne sera toujours dans le tampon d'entrée et la méthode String prend en entrée la partie restante de nextFloat() qui ne sera rien dans le cas ci-dessus.

Pour résoudre le problème donné, nous ajoutons KB.nextLine() juste au-dessus de s=KB.nextLine();

Considérez le programme :

import java.util.Scanner;

class UnexpectedBehaviour
{
	public static void main(String args[])
	{
		Scanner KB=new Scanner(System.in);
		
		int i;
		float f;
		String s;
		
		i=KB.nextInt();
		f=KB.nextFloat();
		KB.nextLine();
		s=KB.nextLine();
		
		System.out.println("Output String is : "+s);
		System.out.println("Output Integer is : "+i);
		System.out.println("Output Float is : "+f);
	}
}

Sortie

1 
8.8 
Java is Cool !
Output String is : Java is Cool ! 
Output Integer is : 1 
Output Float is : 8.8

Balise Java