Programme pour faire un formulaire

Résolu/Fermé
eliereve Messages postés 6 Date d'inscription jeudi 21 janvier 2021 Statut Membre Dernière intervention 17 mai 2021 - Modifié le 22 janv. 2021 à 07:06
eliereve Messages postés 6 Date d'inscription jeudi 21 janvier 2021 Statut Membre Dernière intervention 17 mai 2021 - 22 janv. 2021 à 13:47
Bonjour,
Je débute en java et j'aimerais faire un mini programme pour demander l'âge et le nom d'une personne et éventuellement plus par la suite.
Au début, je demande le nom de la personne et j'arrive à afficher son nom mais ensuite quand je demande l'âge ça me renvoie dans la console :

Username is: elie
How old are you?Exception in thread "main" java.util.NoSuchElementException
 at java.base/java.util.Scanner.throwFor(Scanner.java:937)
 at java.base/java.util.Scanner.next(Scanner.java:1594)
 at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
 at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
 at programme/fr.eliereve.programme.main.main(main.java:18)


voici le code complet :

package fr.eliereve.programme;
import java.util.Scanner;
public class main 
{
 
 public static void main(String[] args) 
 {
  // Auto-generated method stub
  Scanner stringInput = new Scanner(System.in);  // Create a Scanner object
     System.out.println("Enter username");

     String userName = stringInput.nextLine();  // Read user input
     System.out.println("Username is: " + userName);  // Output user input
     stringInput.close();
     
     Scanner scan = new Scanner(System.in);
  System.out.print("How old are you?");
  int age = scan.nextInt(); // instead of scan you can write input both after Scanner and after int age =
  
     // print what is scanned
     System.out.println("You are "+age+" years of age.");
     // close the scanner
     scan.close();
 }

}

c'est pas hyper compliqué mais c'est pour débuter, merci.
Configuration: Windows / Firefox 83.0

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
22 janv. 2021 à 07:17
Bonjour,

Le problème c'est que en faisant
stringInput.close()
tu as également fermé System.in
Donc tu as beau créer un nouveau Scanner derrière, le flux ne se rouvrira pas, donc impossible de lire quoi que ce soit dessus une fois fermé.
Supprimes les lignes 14 et 23 afin de garder le flux ouvert et ça ira mieux.

Remarque : tu n'as qu'un clavier, donc System.in est unique, il serait donc logique de n'avoir qu'un seul Scanner, c'est inutile d'en créer un à chaque fois que tu veux lire une nouvelle donnée.
0
eliereve Messages postés 6 Date d'inscription jeudi 21 janvier 2021 Statut Membre Dernière intervention 17 mai 2021
22 janv. 2021 à 13:47
merci beaucoup!
0