Il existe plusieurs façons de traiter ce problème, par exemple
- Entrez la taille en utilisant
Integer.parseInt(sc.nextLine())
- Mettez un
sc.nextLine();
après int size=sc.nextInt();
La raison en est que Scanner#nextInt
ne consomme pas le saut de ligne qui a été saisi en appuyant sur la touche Enter . El sc.nextLine()
consomme ce saut de ligne.
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// Declare the list
List<String> cars = new ArrayList<>();
Scanner sc = new Scanner(System.in);
System.out.print("Enter the size of the list: ");
int size = Integer.parseInt(sc.nextLine());
for (int i = 0; i < size; i++) {
cars.add(i, sc.nextLine());
}
System.out.println(cars);
}
}
Un exemple d'exécution :
Enter the size of the list: 4
1
2
3
4
[1, 2, 3, 4]
Quelques suggestions supplémentaires (comme vous pouvez le voir dans le code ci-dessus) :
- Utilisez le type générique, c'est-à-dire
List
au lieu de ArrayList
pour le type de la variable, par exemple List<String> cars=new ArrayList<>();
. Notez également que vous n'avez pas besoin de mettre <String>
encore une fois sur le côté droit ; le compilateur peut le déduire de simplement <>
.
- Ne pas fermer un
Scanner
para System.in
car il ferme également System.in
et vous ne pourrez plus l'ouvrir à moins de redémarrer l'application. Il peut arriver que votre application comporte plusieurs classes et qu'une autre classe de l'application doive recevoir des données du clavier ( System.in
).