Java entier et equivalence

Résolu
keurdange Messages postés 720 Date d'inscription   Statut Membre Dernière intervention   -  
keurdange Messages postés 720 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

j'aimerais savoir l'équivalence de clrscr() "clear screen" pour effacer l'ecran et de gotoxy en Java. j'aimerais aussi savoir comment obliger un utilisateur à entrer un entier. (s'il saisi un caractère ou chaine de charactere par exemple).

Merci


A voir également:

1 réponse

KX Messages postés 16760 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Pour clrscr() et gotoxy() tu ne peux pas, car ça dépend de la console.

Pour la saisie d'un entier c'est faisable, cependant si l'utilisateur veut rentrer "toto" à la place de 12, rien ne pourra l'en empêcher. Il faut juste détecter l'erreur et redemander à l'utilisateur de rentrer un nombre.

public static int saisirEntier(String msg)
{	
	try
	{
		System.out.print(msg);
		return Integer.parseInt(new Scanner(System.in).nextLine());
	}
	catch (NumberFormatException e)
	{
		return saisirEntier(msg);
	}	
}

public static void main(String args[])
{	
	int n = saisirEntier("Entrez un nombre : ");
	System.out.println(n);
}
La confiance n'exclut pas le contrôle
2
keurdange Messages postés 720 Date d'inscription   Statut Membre Dernière intervention   231
 
peux tu m'expliquer comment tu as détecter l'erreur ici? En d'autres e commenter un peu le programme.
0
KX Messages postés 16760 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Regarde la documentation de Integer.parseInt(String)
Cela génère une NumberFormatException si le String en entrée n'est pas transformable en int.
Donc je fais un try/catch pour récupérer cette exception et recommencer la saisie.
Quant à l'utilisation de Scanner je le crée avec System.in (le clavier) comme ça me permet de récupérer une chaîne de caractères avec nextLine() que je transforme donc avec parseInt.
En fait avec Scanner, il y a aussi une méthode nextInt() qui est très utile mais ça ferait pas exactement ce que tu veux...

/* msg : le message qui demande de rentrer un nombre */
public static int saisirEntier(String msg)
{	
	// On filtre les exceptions
	try
	{
		// On affiche le message
		System.out.print(msg);

		// On crée un Scanner sur l'entrée clavie
		Scanner sc = new Scanner(System.in);

		// On attend que l'utilisateur entre une ligne
		String str = sc.nextLine();

		// On transforme la ligne en nombre
		// Provoque une exception si ce n'est pas possible
		int n = Integer.parseInt(str);

		// Si on est arrivé ici c'est qu'il n'y a pas eu d'erreur
		// On renvoie la valeur entrée au clavier
		return n;
	}		
	// Si il y a eu des exceptions levées, on les récupères
	// Ici ce sera forcément NumberFormatException
	catch (NumberFormatException e)
	{		
		// On rappelle récursivement la fonction pour tout recommencer
		// De manière à ce que l'utilisateur entre un entier valide
		return saisirEntier(msg);
	}
}
0
keurdange Messages postés 720 Date d'inscription   Statut Membre Dernière intervention   231
 
ok mais j'ai un probleme avec le return de catch.

j'ai fait

catch (NumberFormatException e)
{
return Menu2(m);
}
Avec Menu2 la class et m la valeur saisie
0
KX Messages postés 16760 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
si Menu2 est un constructeur de ta classe, tu devras faire return new Menu2(m);
0
keurdange Messages postés 720 Date d'inscription   Statut Membre Dernière intervention   231
 
Peux pas.

public class Menu2 {
public static int main(String arg[]) throws IOException, InterruptedException

Il me souligne tout en rouge à partir de main(String...)
j'ai mis new Menu2() parcqi'il a refusé le Menu2(m).
m est une variable que j'ai utilisé dans switch(m). Comme m est lu dans try, il me de donner une valeur à m.
0