2 votes

Existe-t-il un moyen de supprimer l'erreur que je reçois ?

import java.util.ArrayList;
import java.util.*;

public class Solution { 
    public static void main (String args []){
        ArrayList<String> cars=new ArrayList<String>();

        Scanner sc =new Scanner (System.in);
        System.out.println(" enter the size of the list ");
        int size=sc.nextInt();

        for( int i =0;i<size;i++){ 

             cars.add(i,sc.nextLine());

        }
        System.out.println(cars);
        sc.close();
    }
}

Ce programme devrait produire

1,2,3,4

Mais si j'entre la taille de 4 et que j'entre ces valeurs seulement, mais au lieu de cela, si j'écris la taille de 4 ... il ne prend pas 4 arguments de moi, au lieu de cela il en prendra trois et print(' ',1,2,3)

aidez-nous

2voto

Vishal V Points 195

La fonction nextLine() déplace le pointeur vers la ligne suivante. L'utilisation de next résout donc le problème

import java.util.ArrayList;

import java.util.*;
public class Solution { 
    public static void main (String args []){
       ArrayList<String> cars=new ArrayList<String>();

       Scanner sc =new Scanner (System.in);
        System.out.println(" enter the size of the list ");
        int size=sc.nextInt();

        for( int i =0;i<size;i++){ 
            System.out.println(" enter the " + i + " number : ");
            cars.add(i, sc.next());

        }
        System.out.println(cars);
        sc.close();
    }
}

2voto

Subrato Patnaik Points 1771

Vous devez ajouter sc.nextLine() juste avant la boucle for.

Lorsque vous saisissez un numéro puis appuyez sur Enter , input.nextInt() ne prend que le numéro, pas la fin de la ligne. Cependant, lorsque vous exécutez input.nextLine() il prend la fin de la ligne qui est déjà dans le tampon de la première entrée. Utilisez toujours input.nextLine() immédiatement après input.nextInt()

Vous essayiez d'accepter un nombre mais vous avez déclaré l'adresse de l'ordinateur. ArrayList comme String . Votre code ressemblera à ceci

import java.util.ArrayList;

import java.util.*;
public class Main
{
    public static void main(String[] args) {

        ArrayList<String> cars=new ArrayList<String>();
        Scanner sc =new Scanner (System.in);
        System.out.println(" enter the size of the list ");
        int size=sc.nextInt();

        sc.nextLine();
        for( int i =0;i<size;i++){ 
             cars.add(i,sc.nextLine());
        }
        System.out.println(cars);
        sc.close();
    }
}

1voto

Swapnil Padaya Points 634

Quand vous le faites list.add(i, value) ce qu'il fait c'est de garder le value en el i indice du de List .
Quoi .nextLine lit-il la ligne suivante qui est vide, ce qui entraîne *space* dans la première position du list .

donc quand vous faites cars.add(i,sc.nextLine()) c'est ajouter de l'espace dans le premier index c'est-à-dire 0 . Ce que vous pouvez faire est.

for( int i =0;i<size;i++){ 
      cars.add(i,sc.next());
    }

Quand vous le faites sc.next() il vérifie le caractère suivant plutôt que de parcourir la ligne suivante.

1voto

Arvind Kumar Avinash Points 49501

Il existe plusieurs façons de traiter ce problème, par exemple

  1. Entrez la taille en utilisant Integer.parseInt(sc.nextLine())
  2. 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) :

  1. 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 <> .
  2. 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 ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X