Java entier et equivalence

Résolu
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

Résumé de la discussion

L'équivalence de clrscr() et clear screen et l'utilisation de gotoxy en Java, ainsi que la manière d'obliger l'utilisateur à entrer un entier, constituent le cœur de l'échange. Pour clrscr() et gotoxy(), plusieurs répondants indiquent que ces fonctions dépendent de la console et ne sont pas universelles en Java dans la plupart des environnements d'exécution. Concernant la saisie d'un entier, il faut détecter l'erreur et redemander l'entrée, en utilisant Integer.parseInt avec NumberFormatException et une boucle ou une récursion pour garantir une entrée correcte. Par ailleurs, plusieurs réponses évoquent des questions de structure Java, comme l'obligation d'avoir une classe publique dans un fichier portant le même nom, ou l'impact de l'ordre des définitions sur la compilation.

Bobot (l’IA à votre service)
  1. Modérateur
    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
    1. peux tu m'expliquer comment tu as détecter l'erreur ici? En d'autres e commenter un peu le programme.
    2. Modérateur
      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);
      	}
      }
    3. 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
    4. Modérateur
      si Menu2 est un constructeur de ta classe, tu devras faire return new Menu2(m);
    5. 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.