Java entier et equivalence

Résolu
keurdange Messages postés 816 Statut Membre -  
keurdange Messages postés 816 Statut Membre -
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



--
Dieu n'a fait qu'ébaucher l'homme, c'est sur terre que chacun se crèe

1 réponse

  1. KX Messages postés 19031 Statut Modérateur 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
    1. keurdange Messages postés 816 Statut Membre 232
       
      peux tu m'expliquer comment tu as détecter l'erreur ici? En d'autres e commenter un peu le programme.
      0
    2. KX Messages postés 19031 Statut Modérateur 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
    3. keurdange Messages postés 816 Statut Membre 232
       
      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
    4. KX Messages postés 19031 Statut Modérateur 3 020
       
      si Menu2 est un constructeur de ta classe, tu devras faire return new Menu2(m);
      0
    5. keurdange Messages postés 816 Statut Membre 232
       
      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